Sto provando a raggruppare i valori delle colonne in base a una colonna specifica utilizzando FOR XML PATH('')
in TSQL. Questo è il risultato in entrambi i casi (si noti che il senza XML code - vale a dire: SELECT * FROM @xml
- è lo stesso che il con il codice XML):TSQL: PER PERCORSO XML ('') Impossibile raggruppare
Class | Animals
=================================
Asteroidea | Starfish
Mammalia | Dog
Mammalia | Cat
Mammalia | Coyote
Reptilia | Crocodile
Reptilia | Lizard
Secondo this article e this article (si noti che il secondo articolo lascia fuori la GROUP BY
, che io sono sicuro come l'autore è riuscito a tirare fuori questo senza di essa - ho provato e genera solo tutti i valori), la sintassi dovrebbe essere come illustrato di seguito questo:
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
Dopo pochi ore, tra questi esempi e il codice precedente, non riesco a vedere dove ho sbagliato sulla sintassi, ma sto ricevendo l'er ror "Column '@ xml.Animal" non è valido nell'elenco di selezione perché non è contenuto in una funzione di aggregazione o nella clausola GROUP BY. " Si noti che se si omette la clausola GROUP BY, continua a non produrre i valori nel modo appropriato. Un altro set di occhi sarebbe utile.