在使用MSSQL語法,執行資料表轉向呈現
資料來源:
SQL 中好用的 PIVOT 語法,將直向的多列資料 (彙總) 轉為橫向欄位資料作業。
PIVOT 語法說明
SELECT 非 PIVOT 欄位 ..., 第一個 PIVOT 欄位, 第二個 PIVOT 欄位..., 最後的 PIVOT 欄位FROM資料來源PIVOT(要使用的彙總函數(被彙總欄位)FOR包含 PIVOT 類別的欄位IN (第一個 PIVOT 欄位, 第二個 PIVOT 欄位, ... , 最後的 PIVOT 欄位)) AS PIVOT 表格別名選擇性的 ORDER BY 子句;
範例
CREATE TABLE Customer(
[Name] VARCHAR(20),
ItemClass VARCHAR(20),
ItemPrice MONEY
)
INSERT INTO Customer ([Name], ItemClass, ItemPrice)
VALUES ('小明' , '玩具', '100'), ('小華', '書籍', '200')
, ('小美', '書籍', '150'), ('小華', '書籍', '200')
, ('小明', '零食', '75'), ('小華', '零食', '120');
SELECT [Name], ItemClass, ItemPrice FROM Customer
SELECT PVT.Name
, ISNULL(PVT.玩具, 0) AS 玩具
, ISNULL(PVT.書籍, 0) AS 書籍
, ISNULL(PVT.零食, 0) AS 零食
FROM Customer
PIVOT(
SUM (ItemPrice)
FOR ItemClass IN ([玩具], [書籍], [零食])
) AS PVT
DROP TABLE Customer
原本的資料表為:
Name | ItemClass | ItemPrice |
---|---|---|
小明 | 玩具 | 100.00 |
小華 | 書籍 | 200.00 |
小美 | 書籍 | 150.00 |
小華 | 書籍 | 200.00 |
小明 | 零食 | 75.00 |
小華 | 零食 | 120.00 |
用 PIVOT 旋轉後會變成:
Name | 玩具 | 書籍 | 零食 |
---|---|---|---|
小明 | 100.00 | 0.00 | 75.00 |
小美 | 0.00 | 150.00 | 0.00 |
小華 | 0.00 | 400.00 | 120.0 |
注意
如果在 SQL 中以 PIVOT 旋轉並彙總部分相同的資料,有可能會造成「原始相同的資料」計算結果錯誤
SQL 中好用的 PIVOT 語法,將橫向的欄位資料旋轉為直向多列的資料作業。
語法為
SELECT [標題欄位], [數值欄位], 非 UNPIVOT 欄位 ...
FROM [來源表格]
UNPIVOT ([數值欄位] FOR [標題欄位] IN [要旋轉的欄位])。
以下是範例。
-- 建立分數資料表 (名字, 國文, 數學, 英文) 與資料
CREATE TABLE Scores ([Name] VARCHAR(10), Chinese INT, Math INT, English INT);
INSERT INTO Scores VALUES ('Jack', 80, 60, 50);
INSERT INTO Scores VALUES ('Jeff', 80, 70, 85);
INSERT INTO Scores VALUES ('Justin', 74, 83, 65);
INSERT INTO Scores VALUES ('Aaron', 94, 92, 65);
-- 轉置分數資料
SELECT [Name], [Subject], Score
FROM
(
SELECT [Name], Chinese, Math, English
FROM Scores
) p
UNPIVOT
(
Score FOR [Subject] IN (Chinese, Math, English)
)
AS unpvt;
留言