Estou querendo agrupar por dias e retornar um ids separado por vírgula.
Mesa
CREATE TABLE data (
Id INT IDENTITY(1, 1),
Days VARCHAR(255)
);
Dados
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
Resultado esperado
Ids
---------------------------------------------------
2612,2614
2617
2651
2652
Erro
(nenhum resultado para saída)
Amostra corrigida
https://sqlfiddle.com/sql-server/online-compiler?id=f688372d-3952-4de9-ad10-7930a6428ee8
Usar STUFF é a maneira antiga de lidar com isso. Usar STRING_AGG é muito mais simples e mais rápido porque você não precisa de junções.
Conforme mencionado nos comentários. Você não pode inserir valores de identidade quando Identity_insert estiver desativado. Remova a identidade ou ative Identity_insert para essa tabela.
Você está correlacionando pela coluna errada, precisa correlacionar por
Days
.Observe que se você deseja agregar texto, você precisa ter certeza de remover o escape do XML corretamente: