5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

正文共:2300 字 3 圖 預計閱讀時間:5 分鐘

我是firewang,用技術讓資料說話,用資料讓你我進化

5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

編輯

本文目錄:

PIVOT語法

PIVOT示例

UNPIVOT語法

UNPIVOT示例

PIVOT和UNPIVOT

PIVOT 透過將表示式中的一個列的唯一值轉換為輸出中的多列(即

行轉列

),來輪替表值表示式。PIVOT 在需要對最終輸出所需的所有剩餘列值執行聚合時執行聚合。與 PIVOT 執行的操作相反,UNPIVOT 將表值表示式的列輪換為行(即

列轉行

)。

但是需要注意的是,UNPIVOT 並不完全是 PIVOT 的逆操作。PIVOT 執行聚合,並將多個可能的行合併為輸出中的一行。UNPIVOT 不重現原始表值表示式的結果,因為行已被合併。

5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

編輯

例項的資料使用的是和 SQL筆試50題同樣的資料, 使用的平臺是SQLFIDDLE(提供線上資料庫),鑑於近期全球病情的影響,各種網站都有一定機率無法提供服務,本次提供了SQLite資料庫,已存入測試資料。

下載地址(13天內有效):https://c-t。work/s/1786d12bba3e4c

5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

編輯

編輯

將上述結果新建表 Student_pivot

create table Student_pivot ( sid varchar(10),sname nvarchar(10),sage datetime,ssex nvarchar(10), “語文” int, “數學” int,“英語” int); insert into Student values(‘01’ , N‘趙雷’ , ‘1990-01-01’ , N‘男’, 80, 90, 99); insert into Student values(‘02’ , N‘錢電’ , ‘1990-12-21’ , N‘男’, 70, 60, 80); insert into Student values(‘03’ , N‘孫風’ , ‘1990-05-20’ , N‘男’, 80, 80, 80); insert into Student values(‘04’ , N‘李雲’ , ‘1990-08-06’ , N‘男’, 50, 30, 20); insert into Student values(‘05’ , N‘周梅’ , ‘1991-12-01’ , N‘女’, 76, 87, null); insert into Student values(‘06’ , N‘吳蘭’ , ‘1992-03-01’ , N‘女’, 31, null, 34); insert into Student values(‘07’ , N‘鄭竹’ , ‘1989-07-01’ , N‘女’, null, 89, 98); insert into Student values(‘08’ , N‘王菊’ , ‘1990-01-20’ , N‘女’, null,null,null);

5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

編輯

然後將這張結果表裡的資料UNPIVOT回去。

5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

編輯

5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作

編輯

特別注意哪些成績為空的行記錄都沒有出現!

本文專案地址:

https://github。com/firewang/sql50

參考網址:

https://docs。microsoft。com/zh-cn/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15

https://sql50。readthedocs。io/zh_CN/latest/

https://github。com/firewang/sql50