Próbuję grupować wartości kolumn według określonej kolumny przy użyciu FOR XML PATH('')
w TSQL. Jest to wynik w obu przypadkach (należy pamiętać, że bez XML code - czyli: SELECT * FROM @xml
- jest taka sama jak z kodem XML):TSQL: FOR XML PATH ('') Niepowodzenie w grupie
Class | Animals
=================================
Asteroidea | Starfish
Mammalia | Dog
Mammalia | Cat
Mammalia | Coyote
Reptilia | Crocodile
Reptilia | Lizard
według this article i this article (zauważ, że drugi artykuł pomija GROUP BY
, których jestem pewien, w jaki sposób autor zdołał wyciągnąć to bez niej - próbowałem i to tylko generuje wszystkie wartości), składnia powinna być jak pokazano poniżej to:
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
Po kilku godzin, pomiędzy tymi przykładami i powyższym kodem, nie widzę gdzie się mylę w składni, ale otrzymuję er ror "Column" @ xml.Animal "jest niepoprawny na liście select, ponieważ nie jest zawarty ani w funkcji agregującej, ani w klauzuli GROUP BY." Zauważ, że jeśli pominiemy klauzulę GROUP BY, to nadal nie generuje ona wartości w odpowiedni sposób. Przydałby się inny zestaw oczu.