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

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

Mary-Kate Olsen
發布: 2025-01-25 12:26:08
原創
357 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板