oracle SQL 實現豎表轉橫表
T_T_STUDENT表查詢記錄如下,要轉成橫表
姓名 課程 成績
1 張飛 語文 80
2 張飛 數學 87
3 關羽 語文 97
4 張飛 英語 68
5 關羽 數學 53
6 劉備 語文 90
方法一:
--用decode實現,
SELECT T.NAME,
SUM(DECODE(T.Course, '語文', T.Score)) 語文,
SUM(DECODE(T.Course, '數學', T.Score)) 數學,
SUM(DECODE(T.Course, '英語', T.Score)) 英語
FROM T_T_STUDENT T
GROUP BY T.NAME
方法二:
--用case when 實現
SELECT T.NAME,
SUM(CASE T.Course WHEN '語文' THEN T.Score ELSE 0 END) 語文,
SUM(CASE T.Course WHEN '數學' THEN T.Score ELSE 0 END) 數學,
SUM(CASE T.Course WHEN '英語' THEN T.Score ELSE 0 END) 英語
FROM T_T_STUDENT T
GROUP BY T.NAME
姓名 語文 數學 英語
1 劉備 90 94 92
2 關羽 97 53 95
3 張飛 80 87 68
區別如果條件是單一值時,用decode比較簡便,如果判斷條件比較復雜是用case when實現