SQLSERVER 行转列

WITH    data
          AS ( SELECT   '语文' subject_name ,
                        90 score ,
                        '张三' student_name ,
                        '一班' class_name
               UNION ALL
               SELECT   '数学' subject_name ,
                        92 score ,
                        '张三' student_name ,
                        '一班' class_name
               UNION ALL
               SELECT   '英语' subject_name ,
                        93 score ,
                        '张三' student_name ,
                        '一班' class_name
               UNION ALL
               SELECT   '语文' subject_name ,
                        89 score ,
                        '张三1' student_name ,
                        '一班' class_name
               UNION ALL
               SELECT   '数学' subject_name ,
                        82 score ,
                        '张三1' student_name ,
                        '一班' class_name
               UNION ALL
               SELECT   '英语' subject_name ,
                        81 score ,
                        '张三1' student_name ,
                        '一班' class_name
               UNION ALL
               SELECT   '英语' subject_name ,
                        91 score ,
                        '张三1' student_name ,
                        '一班' class_name
             )
    SELECT  *
    FROM    data PIVOT( MAX(score) FOR subject_name IN ( [语文], [数学], [英语] ) ) t;

1,关键函数PIVOT

2,subject_name IN ( [语文], [数学], [英语] )  把行subject_name值在 语文 数学 英语 里的数据转换成列

3,MAX(score)  取最大分数值作为列的值,除开subject_name和score列的其他列分组组合成行数据

查询结果:

原文地址:https://www.cnblogs.com/YoungHeart/p/15153484.html