SQL Server行列转换

有没有人在啊,想请问一下,SQL Server行列转换
最新回答
墨语三千

2026-10-25 19:33:30

在SQL Server数据库中,行列转换是常见的数据操作需求,通过内置函数PIVOT(行转列)和UNPIVOT(列转行)可以轻松实现。这两个函数分别用于满足行数据转为列数据和列数据转为行数据的需求。


行转列(PIVOT)


PIVOT的语法如下:
select * from 源表名 as 表别名 pivot(聚合函数(字段名) for 列名字段名 in (列名1, 列名2...)) as 表别名
例如,我们可以通过创建一个名为StudentScores的表并运用PIVOT函数,将数据从原始格式转换为如下所示:


...查询结果...

动态查询语句也可用于实现类似功能,具体可参考相关教程。


列转行(UNPIVOT)


UNPIVOT的语法则是:
select * from 源表名 as 表别名 unpivot(列名 for 字段名 in (字段名1, 字段名2...)) as 表别名
如以StudentGrades表为例,UNPIVOT可以将数据从列式转为行式,如下所示:


...查询结果...

值得注意的是,UNPIVOT并不等同于PIVOT的逆操作。PIVOT执行聚合,将数据合并到一行,而UNPIVOT则将合并后的行还原,但NULL值在UNPIVOT过程中可能被忽略。