1. 程式人生 > >sql語句中的 行轉列 查詢

sql語句中的 行轉列 查詢

有時候多行資料需要一行顯示,  這就需要行轉列的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後面的內容中  ,  身高 欄位 將作為行轉列後的值,   學生欄位,將作為行轉列後的欄位名,

'甲'甲    單引號中 甲 是為了獲取對應行的值 ,  後面的甲 是該值的欄位名