在使用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

原本的資料表為:

NameItemClassItemPrice
小明玩具100.00
小華書籍200.00
小美書籍150.00
小華書籍200.00
小明零食75.00
小華零食120.00
用 PIVOT 旋轉後會變成:

Name玩具書籍零食
小明100.000.0075.00
小美0.00150.000.00
小華0.00400.00120.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; 





留言

這個網誌中的熱門文章

簽字筆 奇異筆 光碟筆 油漆筆 麥克筆 差別在哪

DC 常用指令

如何在 Excel 2010 中將數值設定成以「千」或「百萬」為單