sql語句中的 行轉列 查詢
阿新 • • 發佈:2018-12-29
有時候多行資料需要一行顯示, 這就需要行轉列的sql啦.
首先 ,要知道 行轉列當然是要以某個欄位進行分組的,然後再根據表中 一個欄位的值做轉列後的欄位名, 這個值所對應的另一個欄位作為 值
示例:
表名: XX班
班級 學生 身高 一班 甲 161 一班 乙 162 一班 丙 163 一班 丁 164 一班 戊 165
假如:要將上表進行轉列 轉換結果如下表:
班級 甲 乙 丙 丁 戊 一班 161 162 163 164 165
以班級進行分組, 以學生 作為欄位名,以身高為每個學生欄位的額值.
SELECT 班級
SUM(CASE WHEN 學生 = 甲 TNEN 身高 ELSE 0 END) 甲,
SUM(CASE WHEN 學生 = 乙 TNEN 身高 ELSE 0 END)乙 ,
SUM(CASE WHEN 學生 = 丙 TNEN 身高 ELSE 0 END)丙 ,
SUM(CASE WHEN 學生 = 丁 TNEN 身高 ELSE 0 END)丁 ,
SUM(CASE WHEN 學生 = 戊 TNEN 身高 ELSE 0 END) 戊
FROM XX班 GROUP BY 班級
第二種sql語句, 感覺更好一點 ,
SELECT
*
FROM
(SELECT 班級,學生,身高 from XX班 )PIVOT (
SUM (身高) FOR 學生 IN (
'甲'甲,
'乙'乙,
'丙'丙
)
)
括號中的sql 是查詢出 分組欄位, 按照 班級分組, 學生和升高是需要行轉列的
pivot後面的內容中 , 身高 欄位 將作為行轉列後的值, 學生欄位,將作為行轉列後的欄位名,
'甲'甲 單引號中 甲 是為了獲取對應行的值 , 後面的甲 是該值的欄位名