ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MSSQL·UNPIVOT关键字实现行转列

2021-08-16 02:31:26  阅读:211  来源: 互联网

标签:10 -- column 转列 UNPIVOT PIVOT MSSQL


阅文时长 | 0.74分钟 字数统计 | 1185.6字符
主要内容 | 1、引言&背景 2、UNPIVOT基本语法结构 3、数据准备&行转列实现 4、声明与参考资料
『MSSQL·UNPIVOT关键字实现行转列』
编写人 | SCscHero 编写时间 | 2021/8/14 PM9:27
文章类型 | 系列 完成度 | 已完成
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

UNPIVOT关键字如何实现行转列?

b) 应对场景

  1. 如图,员工第一季度工资表,实现行转列。以单表的多个字段拆分成多行数据。
  1. 仍适用于多字段存储同级数据的,例如学生成绩表,按学生维度存储各科学习成绩。

二、UNPIVOT基本语法结构   完成度:100%

UNPIVOT语法结构如下:

-- UNPIVOT 语法
SELECT [columns not unpivoted],
     [unpivot_column],
       [value_column],
FROM
(<source query>)
AS <alias for the source data>
UNPIVOT ( [value_column] FOR [unpivot_column] IN ( <column_list> ) ) 
   AS <alias for unpivot>

--[columns not unpivoted]: 固定列,即不经过转换的,直接查出来的列。
--[unpivot_column]: 需要被拆分的列名称。
--[value_column]: 需要被拆分的列对应的值。
--<source query>: 数据结果集。
--<alias for the source data>: 数据结果集别名,必须结构,可省略AS。
--<column_list>:  需要被拆分的各列的名称。
--<alias for unpivot>: 行转列过程结果集的别名,必须结构,可省略AS。

三、数据准备&行转列实现   完成度:100%

a) 数据准备


--示例:员工工资表
USE SCscHero_001_SSMSCode

CREATE TABLE [dbo].[实战设计_002_PIVOT实现行转列]
(
    [EID] INT NOT NULL PRIMARY KEY IDENTITY, 
    [EName] NCHAR(10) NULL, 
    [Year] NCHAR(10) NULL,
    [JanuaryMoney] DECIMAL NULL, 
    [FebruaryMoney] DECIMAL NULL, 
    [MarMoney] DECIMAL NULL,
)

INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'张三', '2021', 10, 0, 90);
INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'赵四', '2021', 10, 0, 60);
INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'王五', '2021', 10, 0, 80);
INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'李六', '2021', 10, 0, 30);
INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'田七', '2021', 10, 0, NULL);
INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'速八', '2021', 10, 0, 34);
INSERT INTO 实战设计_002_PIVOT实现行转列 VALUES(N'玖九', '2021', 10, 0, 8);

数据如下图:

b) 行转列实现

SELECT T.EID, T.EName, T.Year, --[columns not unpivoted]
    T.Month, --[unpivot_column]
    T.Money --[value_column]
FROM(SELECT * FROM dbo.实战设计_002_PIVOT实现行转列) AS UP
    UNPIVOT([Money]
            FOR --[value_column]
            [Month] --[unpivot_column] 
            IN([JanuaryMoney], [FebruaryMoney], [MarMoney]) --column_list
    ) AS T;

四、声明与参考资料   完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

标签:10,--,column,转列,UNPIVOT,PIVOT,MSSQL
来源: https://www.cnblogs.com/SCscHero/p/15145763.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有