You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server动态PIVOT查询:行转列实现方案咨询

SQL Server 动态行转列实现方案

要实现将行数据转为指定列数据,核心是利用SQL Server的PIVOT运算符结合动态SQL自动识别所有需要转换的属性列,避免硬编码列名。以下是具体实现:

动态SQL查询语句

DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX);

-- 生成需要转为列的属性名称(结合Attribute_section命名,避免同属性跨分类冲突)
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(CONCAT(Attribute_section, '_', Attribute))
                      FROM YourTableName
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');

-- 构造动态PIVOT查询
SET @query = N'SELECT Firstname, Lastname, ' + @cols + N'
              FROM (
                    SELECT Firstname,
                           Lastname,
                           CONCAT(Attribute_section, ''_'', Attribute) AS AttributeFullName,
                           Attribute_value
                    FROM YourTableName
                   ) AS SourceData
              PIVOT (
                    MAX(Attribute_value)
                    FOR AttributeFullName IN (' + @cols + N')
                   ) AS PivotTable;';

-- 执行动态SQL
EXEC sp_executesql @query;

关键说明

  • 替换YourTableName为实际表名。
  • 若不需要按分类区分属性,可将CONCAT(Attribute_section, '_', Attribute)改为直接使用Attribute,生成的列名就是属性本身。
  • QUOTENAME函数用于处理属性名称中的特殊字符(如空格、特殊符号),保证列名合法。
  • MAX(Attribute_value)作为聚合逻辑,若同一用户同一属性有多行数据,会取最新/最后一条的值;若确保每个用户每个属性仅一行数据,使用MIN/AVG等聚合函数效果一致。

内容的提问来源于stack exchange,提问作者Shan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:32:04