2013年10月10日 星期四

[SQL] case和decode的用法(行轉列)

假設現有一張Table叫Score如下:

姓名 科目 成績
阿毛 數學 100
阿毛 國文 89
阿花 數學 90
阿花 國文 70

現在目標要將Score這張Table轉換如下圖:

姓名 數學 國文
阿毛 100 89
阿花 90 70

這時SQL指令有兩種下法:

(SQL與Oracle都可用)Case 版:

Select 姓名,
sum((case when 科目='數學' then 成績 else 0 end)) 數學,
sum((case when 科目='國文' then 成績 else 0 end)) 國文
from Score
group by 姓名


Decode 版:(只有Oracle可用)

Select 姓名,
sum(decode(科目,'數學',成績,0)) 數學,
sum(decode(科目,'文',成績,0)) 
from Score
group by 姓名


參考資料:sql與oracle中有關case和decode的用法(行轉列)及比較

沒有留言:

張貼留言