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

SQL Server中PIVOT未按预期工作:每行仅返回一个透视值

PIVOT查询未按预期聚合问题

数据模拟样例

ID行号属性文本内容
6001NameTom
6001Age32
6001TypeSecondary
6002NameJoanne
6002Age36
6002TypePrimary
6011NameBob
6011Age16
6011TypePrimary
6012NameAlex
6012Age99
6012TypeSecondary

期望结果

ID行号NameAgeType
6001Tom32Secondary
6002Joanne36Primary
6011Bob16Primary
6012Alex99Secondary

当前查询语句

SELECT
    [ID],
    [Row],
    [Name],
    Age,
    [Type]
FROM my_data_source
PIVOT (max(Textcontent) FOR Attribute in (
    [Name],
    Age,
    [Type]
)) as p
order by ID, [Row]

实际返回结果

ID行号NameAgeType
6001TomNULLNULL
6001NULL32NULL
6001NULLNULLSecondary
6002JoanneNULLNULL
6002NULL36NULL
6002NULLNULLPrimary
...............

版本信息

组件名称版本
SQL Server Management Studio15.0.18424.0
SQL Server Management Objects (SMO)16.100.47021.0
Microsoft Analysis Services Client Tools15.0.19750.0
Microsoft Data Access Components (MDAC)10.0.19041.5486
Microsoft MSXML3.0 6.0
Microsoft .NET Framework4.0.30319.42000
操作系统10.0.19045

问题原因及解决方案

问题出在直接对my_data_source进行PIVOT时,该数据源可能包含额外的唯一标识列(如自增ID、主键列),这些列会被SQL Server的PIVOT逻辑当作分组键,导致原始表中的每一行单独成为一个分组,最终转置后每个行只有对应属性的列有值,其余为NULL。

同时原查询中的[Row]与实际表列名“行号”不匹配,也会干扰分组逻辑。

修正后的查询语句:

SELECT
    [ID],
    [行号],
    [Name],
    [Age],
    [Type]
FROM (
    -- 仅筛选PIVOT所需的必要列,排除无关唯一标识列
    SELECT ID, [行号], Attribute, Textcontent
    FROM my_data_source
) AS src
PIVOT (
    MAX(Textcontent)
    FOR Attribute IN ([Name], [Age], [Type])
) AS p
ORDER BY ID, [行号]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:59:50