今天給大家講解sql case行轉列的用法,就是將記錄行裡的資料按條件轉換成具體的列。如下面的一個示例:
演示資料準備:
CREATE TABLE Score(姓名 NVARCHAR(10),課程 NVARCHAR(10),分數 INT)
INSERT INTO Score VALUES (N'張三',N'語文',74)
INSERT INTO Score VALUES (N'張三',N'數學',83)
INSERT INTO Score VALUES (N'張三',N'物理',93)
INSERT INTO Score VALUES (N'李四',N'語文',74)
INSERT INTO Score VALUES (N'李四',N'數學',84)
INSERT INTO Score VALUES (N'李四',N'物理',94)
執行完語句如下圖:
我們想要把上圖資料轉為下圖顯示:
可以透過執行如下語句:
SELECT 姓名,
MAX(CASE 課程 WHEN N'語文' THEN 分數 ELSE 0 END) 語文,
MAX(CASE 課程 WHEN N'數學' THEN 分數 ELSE 0 END) 數學,
MAX(CASE 課程 WHEN N'物理' THEN 分數 ELSE 0 END) 物理
FROM Score
GROUP BY 姓名
這樣就很好的完成了行列的轉換了,當然這只是一個比較簡單的例子,SQL Server 2005 版
之後有單獨的行列轉換功能 PIOVT,以下查詢同樣可以得到上面的結果:
SELECT * FROM Score
PIVOT( MAX(分數) FOR 課程 IN (語文,數學,物理)) A
其中 FOR 後面的是我們即將進行行轉列的列部分,IN 裡面的是我們行轉列之後的列,MAX 是聚合 IN 裡面的內容,也可以是其他聚合函式:SUM,MIN,COUNT 等,PIVOT 寫法比較固定,就是 CASE WHEN 的一種簡略的寫法。
CASE 是我們在日常工作中使用非常頻繁的一個功能,可以很好地將我們需要的輸出資料據單獨地顯示在一列裡面,有助於對資料有個比較清晰的掌握。與 Excel 的轉置有點類似,但是其功能的多樣性又比 Excel 更強一點。
你學會了嗎,關注我,一起學SQL。