首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 行轉列與列轉行:CASE WHEN 與 PIVOT/UNPIVOT 完全攻略

     編輯:關於SqlServer

經典案例:學生成績表行轉列

原始資料:每列一筆「學生-科目-分數」。

CREATE TABLE StudentScores (UserName NVARCHAR(20), Subject NVARCHAR(30), Score FLOAT);
INSERT ... -- Nick/Kent 四科分數

方法一:傳統 CASE WHEN 聚合

SELECT UserName,
    MAX(CASE Subject WHEN '語文' THEN Score ELSE 0 END) AS '語文',
    MAX(CASE Subject WHEN '數學' THEN Score ELSE 0 END) AS '數學',
    MAX(CASE Subject WHEN '英語' THEN Score ELSE 0 END) AS '英語',
    MAX(CASE Subject WHEN '生物' THEN Score ELSE 0 END) AS '生物'
FROM StudentScores
GROUP BY UserName;

結果:每生一列,四科分數橫向展開(圖 1)。

行轉列結果

圖 1. 行轉列查詢結果

方法二:PIVOT 語法(SQL 2005+)

SELECT UserName, [語文], [數學], [英語], [生物]
FROM StudentScores
PIVOT (MAX(Score) FOR Subject IN ([語文],[數學],[英語],[生物])) AS pvt;

語法更簡潔、可讀性更高。列轉行對應使用 `UNPIVOT`。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved