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

SQL Server 2012中临时表结合FOR XML PATH按项目合并人员串异常排查

SQL Server 2012按项目分组合并人员字符串的解决方案

问题场景

使用SQL Server 2012,需将临时表#Team中同一项目(WBS1字段)的人员(Team字段)合并为逗号分隔的字符串,但当前SQL语句返回所有项目的人员列表均为全部人员,无法实现按项目分组展示的需求。

原错误SQL语句

select #Team.WBS1, 
    stuff((
        Select ',', #Team.Team as [text()]
        from #Team
        Where #team.WBS1 = #team.wbs1
        for xml path('')
    ), 1, 1, '') 
from #Team

当前错误结果

项目人员
1john, jim, sean, billy
1john, jim, sean, billy
......

所有项目行均显示全部人员集合。

期望结果

项目人员
1john, jim, sean, billy
2billy
3jim, sean
4john, jim, billy

原始数据结构

项目人员
1john
1jim
......

每个项目对应多条人员记录。

问题核心

子查询的WHERE条件未正确关联外层与内层临时表,#team.WBS1 = #team.wbs1是同一表的自相等判断,永远为真,导致子查询返回全部人员数据。

修正后的SQL语句

SELECT t1.WBS1,
       STUFF((
           SELECT ',' + t2.Team
           FROM #Team t2
           WHERE t2.WBS1 = t1.WBS1
           FOR XML PATH(''), TYPE
       ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS 人员
FROM #Team t1
GROUP BY t1.WBS1;

关键说明

  1. 给内外层临时表分别取别名t1和t2,通过t2.WBS1 = t1.WBS1实现外层项目与内层人员的精准关联,确保只合并当前项目的人员。
  2. 用GROUP BY t1.WBS1对项目分组,避免同一项目出现多条重复结果。
  3. 使用TYPE和.value('.', 'NVARCHAR(MAX)')处理特殊字符(如&、<等),避免XML自动转义问题,比直接拼接text()更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:03