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

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

Barbara Streisand
發布: 2025-01-25 12:32:10
原創
707 人瀏覽過

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 |

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板