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