server多列转行 sql_5分钟学会SQL SERVER行转列、列转行,PIVOT操作

本文介绍了SQL Server中的PIVOT和UNPIVOT操作,用于实现数据的行转列和列转行。通过示例详细解释了如何使用这两者进行数据转换,并展示了数据转换前后的效果。同时,文章提供了实例数据和相应的SQL语句,帮助读者更好地理解和应用这些概念。
摘要由CSDN通过智能技术生成

正文共:2300 字 3 图 预计阅读时间:5 分钟

我是firewang,用技术让数据说话,用数据让你我进化

编辑

本文目录:

PIVOT语法PIVOT示例UNPIVOT语法UNPIVOT示例PIVOT和UNPIVOT

PIVOT 通过将表达式中的一个列的唯一值转换为输出中的多列(即行转列),来轮替表值表达式。PIVOT 在需要对最终输出所需的所有剩余列值执行聚合时运行聚合。与 PIVOT 执行的操作相反,UNPIVOT 将表值表达式的列轮换为行(即列转行)。

但是需要注意的是,UNPIVOT 并不完全是 PIVOT 的逆操作。PIVOT 执行聚合,并将多个可能的行合并为输出中的一行。UNPIVOT 不重现原始表值表达式的结果,因为行已被合并。

编辑

实例的数据使用的是和 SQL笔试50题同样的数据, 使用的平台是SQLFIDDLE(提供在线数据库),鉴于近期全球病情的影响,各种网站都有一定几率无法提供服务,本次提供了SQLite数据库,已存入测试数据。

下载地址(13天内有效):https://c-t.work/s/1786d12bba3e4c

编辑

编辑

将上述结果新建表 Student_pivot

create table Student_pivot ( sid varchar(10),sname nvarchar(10),sage datetime,ssex nvarchar(10), "语文" int, "数学" int,"英语" int); insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男', 80, 90, 99); insert into Student values('02' , N'钱电' , '1990-12-21' , N'男', 70, 60, 80); insert into Student values('03' , N'孙风' , '1990-05-20' , N'男', 80, 80, 80); insert into Student values('04' , N'李云' , '1990-08-06' , N'男', 50, 30, 20); insert into Student values('05' , N'周梅' , '1991-12-01' , N'女', 76, 87, null); insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女', 31, null, 34); insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女', null, 89, 98); insert into Student values('08' , N'王菊' , '1990-01-20' , N'女', null,null,null);

编辑

然后将这张结果表里的数据UNPIVOT回去。

编辑

编辑

特别注意哪些成绩为空的行记录都没有出现!

本文项目地址:

https://github.com/firewang/sql50

参考网址:

https://docs.microsoft.com/zh-cn/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15https://sql50.readthedocs.io/zh_CN/latest/https://github.com/firewang/sql50

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值