SQL Server數(shù)據(jù)庫PIVOT函數(shù)的使用詳解
SQL Server數(shù)據(jù)庫中,PIVOT在幫助中這樣描述滴:可以使用 PIVOT 和UNPIVOT 關系運算符將表值表達式更改為另一個表。PIVOT 通過將表達式某一列中的***值轉換為輸出中的多個列來旋轉表值表達式,并在必要時對最終輸出中所需的任何其余列值執(zhí)行聚合。UNPIVOT 與 PIVOT 執(zhí)行相反的操作,將表值表達式的列轉換為列值。
測試用的數(shù)據(jù)及表結構:
- CREATE TABLE ShoppingCart(
- [Week] INT NOT NULL,
- [TotalPrice] DECIMAL DEFAULT(0) NOT NULL
- )
- INSERT INTO ShoppingCart([Week],[TotalPrice])
- SELECT 1,10 UNION ALL
- SELECT 2,20 UNION ALL
- SELECT 3,30 UNION ALL
- SELECT 4,40 UNION ALL
- SELECT 5,50 UNION ALL
- SELECT 6,60 UNION ALL
- SELECT 7,70
- SELECT * FROM ShoppingCart
輸出結果:
來看下PIVOT怎么把行變列:
- SELECT 'TotalPrice' AS [Week],[1],[2],[3],[4],[5],[6],[7]
- FROM ShoppingCart PIVOT(SUM(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS T
輸出結果:
可以看出來,轉換完成了,就這么個功能。再看一個UNPIVOT函數(shù),與上述功能相反,把列轉成行。我們直接使用WITH關鍵字把上述PIVOT查詢當成源表,然后再使用UNPIVOT關鍵把它旋轉回原來的模樣,SQL腳本及結果如下:
- WITH P AS (
- SELECT 'TotalPrice' AS [Week],[1],[2],[3],[4],[5],[6],[7]
- FROM ShoppingCart PIVOT(SUM(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7]))
- AS T
- )
- SELECT
- [WeekDay] AS [Week],
- [WeekPrice] AS [TotalPrice]
- FROM P
- UNPIVOT(
- [WeekPrice] FOR [WeekDay] IN([1],[2],[3],[4],[5],[6],[7])
- )AS FOO
關于SQL Server數(shù)據(jù)庫PIVOT函數(shù)的使用的相關知識就介紹到這里了,希望本次的介紹能夠對您有所收獲!
【編輯推薦】