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

SQL Server 2016如何合并Pivot结果中Chair与Co-Chair为同一列

解决方案

你需要的是对两个数值字段求和合并,而非字符串拼接,所以无需使用concat函数,直接对两列数值相加即可,同时修正原SQL的语法问题后方案如下:

测试表创建代码

CREATE TABLE #temp2 (
    University varchar(255),
    ChairRole varchar(255)
);

INSERT INTO #temp2 (University ,ChairRole) VALUES ('Test 1','Chair')
INSERT INTO #temp2 (University ,ChairRole) VALUES ('Test 2','Chair')
INSERT INTO #temp2 (University ,ChairRole) VALUES ('Test 3','Vice-Chair')
INSERT INTO #temp2 (University ,ChairRole) VALUES ('Test 4','Co-Chair')

修正后的查询SQL

按大学拆分统计版本

SELECT
    University,
    Chair = ISNULL([Chair], 0) + ISNULL([Co-Chair], 0),
    [Vice-Chair] = ISNULL([Vice-Chair], 0)
FROM #temp2
PIVOT (
    COUNT(*)
    FOR [ChairRole] IN ([Chair],[Vice-Chair],[Co-Chair])
) AS p
WHERE University IS NOT NULL
ORDER BY [Vice-Chair] DESC
FOR XML PATH('University'), TYPE
FOR XML PATH('Report')

全局汇总版本(符合你给出的期望输出结构)

SELECT
    SUM(ISNULL([Chair], 0) + ISNULL([Co-Chair], 0)) AS Chair,
    SUM(ISNULL([Vice-Chair], 0)) AS [Vice-Chair]
FROM #temp2
PIVOT (
    COUNT(*)
    FOR [ChairRole] IN ([Chair],[Vice-Chair],[Co-Chair])
) AS p
FOR XML PATH('University'), TYPE
FOR XML PATH('Report')

核心改动说明

  • Chair列直接计算为ISNULL([Chair], 0) + ISNULL([Co-Chair], 0),合并两个角色的统计数值
  • 移除SELECT语句中的[Co-Chair]字段,最终XML输出不会包含该节点
  • 修正PIVOT中的聚合函数:原语句SUM(Total)引用了不存在的Total字段,替换为COUNT(*)实现按角色统计数量
  • 移除原语句多余的右括号,修复语法错误

输出结果

全局汇总版本执行后得到的XML符合预期格式:

<Report>
    <University>
        <Chair>3</Chair>
        <Vice-Chair>1</Vice-Chair>
    </University>
</Report>

数值差异为你给出的示例测试数据和实际业务数据差异导致,合并逻辑保持通用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:01