SQL Server 的 PIVOT 函數:將行轉換為列,處理靜態和動態週數
背景:
您有一個包含多個列的臨時表,包括商店編號、週數和相應的總計。週數是動態的,這使得將數據透視到表格格式變得具有挑戰性。
解決方案:
要在 SQL Server 中使用 PIVOT
函數將行轉換為列,請按照以下步驟操作:
1. 靜態週數:
如果週數已知,請使用以下硬編碼查詢:
<code class="language-sql">SELECT * FROM ( SELECT store, week, xCount FROM yt ) src PIVOT ( SUM(xcount) FOR week IN ([1], [2], [3]) ) piv;</code>
2. 動態週數:
如果週數是動態的,請使用動態 SQL:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Week) FROM yt GROUP BY Week ORDER BY Week FOR XML PATH(''), TYPE ).VALUE('.', 'NVARCHAR(MAX)') ,1,1,''); SET @query = 'SELECT store,' + @cols + ' FROM ( SELECT store, week, xCount FROM yt ) x PIVOT ( SUM(xCount) FOR week IN (' + @cols + ') ) p '; EXECUTE(@query);</code>
結果:
這兩個查詢都返回一個透視表,商店編號在左側,週數在頂部。每個單元格包含對應商店和周數的“xCount”之和。
<code>| STORE | 1 | 2 | 3 | --------------------------- | 101 | 138 | 282 | 220 | | 102 | 96 | 212 | 123 | | 105 | 37 | 78 | 60 | | 109 | 59 | 97 | 87 |</code>
以上是如何使用SQL Server的Pivot函數將行樞軸排入列中,並處理靜態和動態週數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!