我想按天分组并返回以逗号分隔的 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
预期结果
Ids
---------------------------------------------------
2612,2614
2617
2651
2652
错误
(没有结果输出)
修正样本
https://sqlfiddle.com/sql-server/online-compiler?id=f688372d-3952-4de9-ad10-7930a6428ee8
使用 STUFF 是处理这个问题的旧方法。使用STRING_AGG更加简单并且速度更快,因为您不需要任何联接。
正如评论中提到的。当 Identity_insert 关闭时,您无法插入标识值。删除该表的标识或将identity_insert 设置为on。
您通过错误的列进行关联,您需要通过 进行关联
Days
。请注意,如果您想要聚合文本,那么您需要确保正确转义 XML: