SQL Server 樞紐PIVOT

樞紐就是…讓資料表更清楚看一點的東西
Excel的樞紐分析表拉到SQL Server裡也有對應的指令
當然畫面不可能像Excel那麼好看
不過就資料讀取來說,已經很夠了


關鍵字是PIVOT
以下的指令,會實現讓員工表依先生、小姐、職稱做出分類

WITH TEMP
AS
(
 SELECT 職稱,稱呼,COUNT(*) AS 人數
 FROM 員工
 GROUP BY 職稱,稱呼
)
SELECT 職稱,[小姐],[先生]
FROM TEMP
PIVOT
(
 SUM(人數) FOR 稱呼 IN([先生],[小姐])
 --按字面說法就是:總合(人數) 給 稱呼 是在(先生、小姐)
 --白話的說法就是依稱呼分先生、小姐,並各別計算人數
 
)
AS PP

第2個是依年,計算出各類別的總銷售量
WITH TEMP
AS 
(
 SELECT YEAR(訂單日期)AS 訂單年,類別名稱,SUM(數量) AS 銷售量
 FROM 訂貨主檔 AS A 
 JOIN 訂貨明細 AS B ON A.訂單號碼=B.訂單號碼
 JOIN 產品資料 AS C ON C.產品編號 = B.產品編號
 JOIN 產品類別 AS D ON C.類別編號 = D.類別編號
 GROUP BY YEAR(訂單日期),類別名稱
)
SELECT 類別名稱,[2002],[2003],[2004]
FROM TEMP
PIVOT
(
 SUM(銷售量) FOR 訂單年 IN([2002],[2003],[2004])
)
AS AA


補充一下傳統寫法,利用語法概念一樣可以做出同樣的效果:

SELECT 職稱,
 sum(CASE WHEN 稱呼='小姐' THEN 1 ELSE 0 END) AS '小姐',
 sum(CASE WHEN 稱呼='先生' THEN 1 ELSE 0 END) AS '先生'
FROM 員工 
GROUP BY 職稱

留言

熱門文章