首頁 >資料庫 >mysql教程 >如何使用SQL Server的Pivot函數將行樞軸排入列中,並處理靜態和動態週數?

如何使用SQL Server的Pivot函數將行樞軸排入列中,並處理靜態和動態週數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-25 12:26:08329瀏覽

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>

How Can I Pivot Rows into Columns Using SQL Server's PIVOT Function, Handling Both Static and Dynamic Week Numbers?

以上是如何使用SQL Server的Pivot函數將行樞軸排入列中,並處理靜態和動態週數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn