首頁 >資料庫 >mysql教程 >SQL Server 的 PIVOT 運算子如何將多列資料重塑為面向行的格式?

SQL Server 的 PIVOT 運算子如何將多列資料重塑為面向行的格式?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 18:36:13614瀏覽

How can SQL Server's PIVOT operator reshape data from multiple columns into a row-oriented format?

揭開SQL Server 中PIVOT 的秘密

我們常常會遇到一些資料集,其中資料的結構化方式使得分析變得困難並以有意義的形式呈現。當資料被組織成多個欄位時,就會出現這樣的情況,每個欄位代表特定類別的不同值。要將這些資料集轉換為以類別為列、值為行的表,我們可以在 SQL Server 中使用 PIVOT 運算子。

讓我們考慮一個場景,其中我們有一個名為「mytable」、列為「Name1」的表、「名稱2」和「值」。此表中的資料代表與不同名稱(「A」和「B」)相關的各種值(「P1」、「P2」、「P3」、「P4」):

Name1  Name2  Value
A      P1     1
A      P2     1
A      P3     2
B      P1     3
B      P2     1
B      P4     1

我們的目標是將這些資料重組為以下格式:

       A     B
P1     1     4
P2     1     1
P3     2     NULL
P4     NULL  1

在SQL Server 2005 中,我們可以利用動態查詢建構來使用PIVOT來完成此轉換。以下是逐步指南:

  1. 組裝以逗號分隔的列名稱字串: 執行以下查詢以建立一個包含所有不同「Name1」的字串"數值之間用逗號:

    DECLARE @cols VARCHAR(1000)
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Name1])
                         FROM myTable FOR XML PATH('') ), 1, 1, '') 
  2. 建構動態SQL查詢: 建立一個名為@sqlquery 的變量,並為其分配以下查詢模板:

    DECLARE @sqlquery VARCHAR(2000)
    SET @sqlquery = 'SELECT * FROM
       (SELECT Name2, Name1, Value
        FROM myTable ) base
        PIVOT (Sum(Value) FOR [Name1]
        IN (' + @cols + ')) AS finalpivot'
  3. 執行動態查詢:使用以下命令執行@sqlquery變數EXECEUTE (@sqlquery)產生資料透視表。函數對每個「Name1」類別的「Value」欄位求和,結果是一個表格,其中「Name2」值用作行標題,「Name1」類別形成列標題。每當您需要將資料從面向列的結構轉換為面向行的結構時,都可以使用PIVOT。

以上是SQL Server 的 PIVOT 運算子如何將多列資料重塑為面向行的格式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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