SQL Server 樞紐PIVOT
樞紐就是…讓資料表更清楚看一點的東西
Excel的樞紐分析表拉到SQL Server裡也有對應的指令
當然畫面不可能像Excel那麼好看
不過就資料讀取來說,已經很夠了
關鍵字是PIVOT
以下的指令,會實現讓員工表依先生、小姐、職稱做出分類
第2個是依年,計算出各類別的總銷售量
補充一下傳統寫法,利用語法概念一樣可以做出同樣的效果:
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 職稱
留言
張貼留言