SQL Server数据按行转列的技巧研究(sqlserver 转置)

随着日益复杂的数据结构,在数据处理、迁移、统析时,经常因原表行列(Row-Column)顺序不合理而引发读取失误,是应用数据库的必备技巧。本文以SQL Server为例,讨论如何利用SQL语句将行转变为列。

假设有以下原数据表:

![](https://media.verywellfit.com/wp-content/uploads/2018/09/example_of_a_database_table.png)

我们现需要对数据以学生ID为单位做分组,将每个考试科目的最终成绩转换为独立的列,如下表:

![](https://miro.medium.com/max/1315/1*9ACN7Gg19DsJvUegWQitjw.png)

可以通过SQL语句将行转变为列,完成上述需求:

“`SQL

SELECT stu_id,

max(CASE WHEN subject=’数学’ THEN score ELSE NULL END) as ‘数学’,

max(CASE WHEN subject=’语文’ THEN score ELSE NULL END) as ‘语文’,

max(CASE WHEN subject=’英语’ THEN score ELSE NULL END) as ‘英语’

FROM exam_table

GROUP BY stu_id;


第一行SELECT用于从语句中获取查询结果,这里会获取原表的stu_id列。

接下来的CASE表达式用于将一行学生的各门成绩拆分成多行记录,其中subject列用于标记各列所对应的科目,最后再把每一列的结果用max()函数获取最终的成绩。

最后的GROUP BY语句用于将所有记录按照stu_id按学生进行分组,实现对各科成绩按学生ID分组转列输出。

总之,当我们需要把一个数据表中行转列时,可以结合CASE表达式和GROUP BY等语句,利用SQL实现,比Excel中的拆活或者其它繁琐的手工操作更加高效,不仅节省工作量,而且可以大大提高工作效率。

数据运维技术 » SQL Server数据按行转列的技巧研究(sqlserver 转置)