按Days分组返回逗号分隔Id列表的SQL语句报错排查
按Days分组拼接Id逗号分隔列表的SQL问题修正
需求
按Days字段分组,返回每组对应的Id逗号分隔列表。
表结构
CREATE TABLE data ( Id INT IDENTITY(1, 1), Days VARCHAR(255) );
测试数据
INSERT INTO data (Id, Days) VALUES (2612,'4'), (2614,'4'), (2617,'5'), (2651,'6'), (2652,'7');
原错误SQL
Select Ids = STUFF((SELECT ',' + CAST(b.Id AS varchar) FROM data b WHERE b.Id = a.Id FOR XML PATH('')), 1, 2, '') from data a group by Days
问题分析
执行上述SQL后无输出结果,核心问题有两个:
- 子查询关联条件错误:用
b.Id = a.Id仅能匹配当前行的单个Id,无法关联同Days分组下的所有记录 STUFF参数错误:逗号仅占1个字符,却指定删除2个字符,导致拼接逻辑失效
修正后的SQL
SELECT Days, Ids = STUFF(( SELECT ',' + CAST(b.Id AS VARCHAR) FROM data b WHERE b.Days = a.Days -- 关联同Days分组的所有记录 FOR XML PATH('') ), 1, 1, '') -- 删除开头的1个逗号 FROM data a GROUP BY Days;
执行结果
Days | Ids -----|---------------- 4 | 2612,2614 5 | 2617 6 | 2651 7 | 2652
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

