」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用樞軸函數將行轉換為SQL Server中的列?

如何使用樞軸函數將行轉換為SQL Server中的列?

發佈於2025-03-22
瀏覽:405

How to Convert Rows to Columns in SQL Server Using the PIVOT Function?

使用 SQL Server 中的 PIVOT 函數將行轉換為列

問題

SQL Server 中的數據透視表提供了一種強大的方法,可以將數據從行轉置為列。但是,用戶在構建正確的查詢時可能會遇到挑戰。

解決方法

針對已知列值使用 PIVOT 函數:

對於預定義的列值(在本例中為周數),可以直接使用 PIVOT 函數:

select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

動態生成透視列值:

為了處理未知的列值(例如動態的周數),可以使用動態 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);

結果:

兩種方法都產生相同的結果:

| 商店 | 1 | 2 | 3 |

| 101 | 138 | 282 | 220 |
| 102 | 96 | 212 | 123 |
| 105 | 37 | 78 | 60 |
| 109 | 59 | 97 | 87 |

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3