這幾天所作的工作涉及到數據庫行轉列的問題
記錄一下出現的錯誤,以免以後再犯
舉網上最通俗的例子吧
Name Subject Result
張三 語文 80
張三 數學 90
張三 物理 85
李四 語文 85
李四 數學 92
李四 物理 82
想要的結果
姓名 語文 數學 物理
張三 80 90 85
李四 85 92 82
正確的寫法
select name as 姓名,
max
(case when subject='語文' then result end) as 語文,
max
(case when subject='數學' then result end) as 數學,
max
(case when subject='物理' then result end) as 物理
from T1 group by
name
最開始寫的時候不知道max 函數有什麼用
而且也沒有加 group by
最後的結果是
姓名 語文 數學 物理
張三 80
張三 90
張三 85
李四 85
李四 92
李四 82
發現結果不對,然後加了 group by語句
結果是
張三 80
李四 85
只有語文項有數據,其他項都爲空
想了很久,最後照葫蘆畫瓢加上了max函數,最後結果正確了
原因就是:
按group by分組會去掉重複的姓名,每個姓名只保留一個,默認爲第一個
加上max聚合函數後,就把張三數學,和物理的最高分給篩選出來了
其實,min,avg,sum都能實現這樣的效果(avg,sum函數會把整形轉換成float型)