首页 >数据库 >mysql教程 >如何使用 PIVOT 运算符在 SQL Server 中透视和连接列?

如何使用 PIVOT 运算符在 SQL Server 中透视和连接列?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-01 12:23:13719浏览

How to Pivot and Concatenate Columns in SQL Server Using the PIVOT Operator?

SQL Server 中的数据透视表和连接列

给定的 SQL Server 数据库包含具有 ID、TYPE、SUBTYPE、COUNT 和 MONTH 的记录列。目标是将这些数据转换为数据透视表,其中 TYPE 和 SUBTYPE 连接成新列,并对匹配的 ID 和 MONTH 值的 COUNT 进行求和。

为了实现此目的,SQL Server 提供了 PIVOT 运算符,该运算符动态地根据提供的值生成列。以下是使用 PIVOT 解决此问题的方法:

DECLARE @sql AS VARCHAR(MAX);
DECLARE @pivot_list AS VARCHAR(MAX);
DECLARE @select_list AS VARCHAR(MAX);

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']',
       @select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']'
FROM (
    SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE
    FROM TableName
) AS PIVOT_CODES;

SET @sql = ';WITH p AS (
    SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT]
    FROM TableName
    GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE
)
SELECT ID, [MONTH], ' + @select_list + '
FROM p
PIVOT (
    SUM([COUNT])
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt';

EXEC (@sql);

此代码动态生成所需的列列表并使用 PIVOT 运算符创建数据透视表。生成的输出将具有所需的格式,其中包含连接的 TYPE 和 SUBTYPE 列以及求和的 COUNT 值。

以上是如何使用 PIVOT 运算符在 SQL Server 中透视和连接列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn