首頁 >資料庫 >mysql教程 >如何使用樞軸函數將行轉換為SQL Server中的列?

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

Barbara Streisand
Barbara Streisand原創
2025-01-25 12:32:10685瀏覽

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

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

問題

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

解決方法

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

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

<code class="language-sql">select *
from 
(
  select store, week, xCount
  from yt 
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;</code>

動態生成透視列值:

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

結果:

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

| 商店 | 1 | 2 | 3 |

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

以上是如何使用樞軸函數將行轉換為SQL Server中的列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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