1. 程式人生 > >SQL Server資料庫PIVOT函式的使用詳解

SQL Server資料庫PIVOT函式的使用詳解

PIVOT 通過將表示式某一列中的唯一值轉換為輸出中的多個列來旋轉表值表示式,並在必要時對最終輸出中所需的任何其餘列值執行聚合。UNPIVOT 與 PIVOT 執行相反的操作,將表值表示式的列轉換為列值。

測試用的資料及表結構:

1.  CREATE TABLE ShoppingCart(  

2.  [Week] INT NOT NULL,  

3.  [TotalPrice] DECIMAL DEFAULT(0) NOT NULL 

4.  )  

5.  INSERT INTO ShoppingCart([Week],[TotalPrice]) 

6.  SELECT 1,10 UNION ALL  

7.  SELECT 2,20 UNION ALL  

8.  SELECT 3,30 UNION ALL  

9.  SELECT 4,40 UNION ALL  

10. SELECT 5,50 UNION ALL  

11. SELECT 6,60 UNION ALL  

12. SELECT 7,70  

13. SELECT * FROM ShoppingCart 

輸出結果:

來看下PIVOT怎麼把行變列:

1.  SELECT 'TotalPrice' AS [Week],[1],[2],[3],[4],[5],[6],[7] 

2.  FROM ShoppingCart PIVOT(SUM(TotalPrice) FOR

 [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS T 

輸出結果:

可以看出來,轉換完成了,就這麼個功能。再看一個UNPIVOT函式,與上述功能相反,把列轉成行。我們直接使用WITH關鍵字把上述PIVOT查詢當成源表,然後再使用UNPIVOT關鍵把它旋轉回原來的模樣,SQL指令碼及結果如下:

1.  WITH P AS (  

2.  SELECT 'TotalPrice' AS [Week],[1],[2],[3],[4],[5],[6],[7] 

3.  FROM ShoppingCart PIVOT(SUM(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7]))  

4.  AS T  

5.  )  

6.  SELECT  

7.  [WeekDay] AS [Week],  

8.  [WeekPrice] AS [TotalPrice]  

9.  FROM P  

10. UNPIVOT(  

11. [WeekPrice] FOR [WeekDay] IN([1],[2],[3],[4],[5],[6],[7]) 

12. )AS FOO