首頁 >資料庫 >mysql教程 >如何使用 UNPIVOT 和 PIVOT 在 MS SQL 中轉置完整表?

如何使用 UNPIVOT 和 PIVOT 在 MS SQL 中轉置完整表?

Susan Sarandon
Susan Sarandon原創
2025-01-14 20:57:44321瀏覽

How Can I Transpose a Full Table in MS SQL Using UNPIVOT and PIVOT?

MS SQL Server:使用 UNPIVOT 和 PIVOT 完成表格轉置

在 MS SQL Server 中轉置具有多列的表需要使用 UNPIVOTPIVOT 函數的組合方法。 UNPIVOT 將多列重塑為行,而 PIVOT 將行值轉換回列。

逐步指南:

  1. 資料逆透視:

    此步驟將列資料轉換為行。 將 yourtableABvaluecol 替換為您的實際表和列名稱。

    <code class="language-sql">SELECT day, col, value
    FROM yourtable
    UNPIVOT
    (
        value
        FOR col IN (A, B)
    ) unpiv</code>
  2. 資料透視:

    在這裡,行資料被旋轉回列。 調整 MonTueWedThuFri 以符合您的特定欄位名稱(本例中為一週中的幾天)。

    <code class="language-sql">SELECT *
    FROM (SELECT * FROM ...) src  -- Replace ... with the UNPIVOT query from step 1
    PIVOT
    (
        MAX(value)
        FOR day IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>
  3. 整合到現有查詢中:

    要在現有查詢中轉置數據,請合併 UNPIVOTPIVOT 操作:

    <code class="language-sql">SELECT *
    FROM
    (
        SELECT LEFT(DATENAME(dw, datetime), 3) AS DateWeek,
               col,
               value
        FROM DataTable
        CROSS APPLY
        (
            VALUES ('A', ACalls), ('B', BCalls)
        ) c (col, value)
    ) src
    PIVOT
    (
        SUM(value)
        FOR DateWeek IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>

使用 PIVOT 和 CROSS APPLY 的範例(SQL Server 2008 及更高版本):

此範例利用 CROSS APPLY 提供更簡潔的解決方案。

<code class="language-sql">SELECT day, col, value
FROM yourtable
CROSS APPLY
(
    VALUES ('A', ACalls), ('B', BCalls)
) c (col, value)
PIVOT
(
    MAX(value)
    FOR day IN (Mon, Tue, Wed, Thu, Fri)
) piv</code>

重要注意事項:

  • 轉置結果中的 col 欄位顯示原始欄位名稱。
  • MAX()函數可以根據您的資料需求替換為其他聚合函數(如SUM()AVG()等)。

這份綜合指南示範如何有效地轉置 MS SQL Server 中的整個資料表,為各種資料操作場景提供彈性和適應性。

以上是如何使用 UNPIVOT 和 PIVOT 在 MS SQL 中轉置完整表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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