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列的其他列分组组合成行数据

查询结果:

SQLSERVER 行转列

 

SQLSERVER 行转列

上一篇:SQL/事务控制语言TCL(Transaction Control Language)


下一篇:mysql分区表批量添加/删除range按天分区(int类型)