2013-04-05 9 views
8

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.

Odpowiedz

9

Chyba masz klauzuli WHERE Użycie niewłaściwego kolumny, którego chcesz użyć Class nie Animal:

SELECT x1.Class 
    , STUFF((SELECT ',' + x2.Animal AS [text()] 
    FROM @xml x2 
    WHERE x1.Class = x2.Class 
    ORDER BY x2.Animal 
    FOR XML PATH('')),1,1,'') AS "Animals" 
FROM @xml x1 
GROUP BY Class 

Zobacz SQL Fiddle with Demo. Wynik:

|  CLASS |   ANIMALS | 
--------------------------------- 
| Asteroidea |   Starfish | 
| Mammalia | Cat,Coyote,Dog | 
| Reptilia | Crocodile,Lizard |