TSQL: PARA XML PATH ('') No se pudo agrupar
Estoy tratando de agrupar los valores de columna por una columna específica usandoFOR XML PATH('')
en TSQL. Este es el resultado en ambos casos (tenga en cuenta que sin el código XML, es decir:SELECT * FROM @xml
- Es lo mismo que con el código XML):
Class | Animals
=================================
Asteroidea | Starfish
Mammalia | Dog
Mammalia | Cat
Mammalia | Coyote
Reptilia | Crocodile
Reptilia | Lizard
De acuerdo aEste artículo yEste artículo (Tenga en cuenta que el segundo artículo deja fuera laGROUP BY
, que no estoy seguro de cómo el autor logró lograr esto sin él (lo he intentado y solo genera todos los valores), la sintaxis debe ser como se muestra a continuación:
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
Después de unas horas, entre estos ejemplos y el código anterior, no veo dónde estoy equivocado en la sintaxis, pero recibo el error "Columna '@ xml.Animal' no es válido en la lista de selección porque no está contenido en una función agregada o en la cláusula GROUP BY ". Tenga en cuenta que si omito la cláusula GROUP BY, todavía no se producen los valores de la manera adecuada. Otro conjunto de ojos sería útil.