1.多行轉多列
行列轉換就是如下圖所示兩種展示形式的互相轉換
(1)使用PIVOT函數
SELECT * FROM student PIVOT ( SUM(score) FOR subject IN (語文, 數學, 英語) ) #默認按照score和subject以外其它字段進行group by
(2)使用Case When
結果跟上述函數一致,但是當涉及字段較多時,使用case when書寫可能不太直觀。
SELECT name, MAX( CASE WHEN subject='語文' THEN score ELSE 0 END) AS "語文", MAX( CASE WHEN subject='數學' THEN score ELSE 0 END) AS "數學", MAX( CASE WHEN subject='英語' THEN score ELSE 0 END) AS "英語" FROM student GROUP BY name
2.多列轉多行
(1)使用UNPIVOT函數
SELECT * FROM student1 UNPIVOT ( score FOR subject IN ("語文","數學","英語") )
(2)使用Case When
結果跟上述函數一致,但是當涉及字段較多時,使用case when書寫可能不太直觀。
SELECT NAME, '語文' AS subject , MAX("語文") AS score FROM student1 GROUP BY NAME UNION SELECT NAME, '數學' AS subject , MAX("數學") AS score FROM student1 GROUP BY NAME UNION SELECT NAME, '英語' AS subject , MAX("英語") AS score FROM student1 GROUP BY NAME
3.多行轉一列
參考文檔: