TSQL: FOR XML PATH ('') Falha ao agrupar
Estou tentando agrupar valores de coluna por uma coluna específica usandoFOR XML PATH('')
em TSQL. Este é o resultado em ambos os casos (note que o sem código XML - ou seja:SELECT * FROM @xml
- é o mesmo que com o código XML):
Class | Animals
=================================
Asteroidea | Starfish
Mammalia | Dog
Mammalia | Cat
Mammalia | Coyote
Reptilia | Crocodile
Reptilia | Lizard
De acordo comEste artigo eEste artigo (note que o segundo artigo deixa de foraGROUP BY
, que eu não tenho certeza como o autor conseguiu fazer isso sem ele - eu tentei e só gera todos os valores), a sintaxe deve ser como mostrado abaixo:
DECLARE @xml TABLE(
Animal VARCHAR(50),
Class VARCHAR(50)
)
INSERT INTO @xml
VALUES ('Dog','Mammalia')
, ('Cat','Mammalia')
, ('Coyote','Mammalia')
, ('Starfish','Asteroidea')
, ('Crocodile','Reptilia')
, ('Lizard','Reptilia')
SELECT x1.Class
, STUFF((SELECT ',' + x2.Animal AS [text()]
FROM @xml x2
WHERE x1.Animal = x2.Animal
ORDER BY x2.Animal
FOR XML PATH('')),1,1,'' ) AS "Animals"
FROM @xml x1
GROUP BY Class
Depois de algumas horas, entre esses exemplos e o código acima, não consigo ver onde estou errado na sintaxe, mas estou recebendo o erro "Coluna '@ xml.Animal' é inválido na lista de seleção porque não é contidos em uma função agregada ou na cláusula GROUP BY. " Observe que, se eu deixar a cláusula GROUP BY, ela ainda não produzirá os valores da maneira apropriada. Outro conjunto de olhos seria útil.