首页 >数据库 >mysql教程 >如何使用 UNPIVOT 和 PIVOT 在 MS SQL 中转置完整表?

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

Susan Sarandon
Susan Sarandon原创
2025-01-14 20:57:44360浏览

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