Groupe et valeurs de la table

J'ai une table

Col1 Col2 --- --- Bar Val1 Bar Val2 Bar Val3 Foo Val4 Foo Val5 Foo Val6 

Je dois écrire une requête qui sort

 Col1 Col2 --- ---------------- Bar Val1, Val2, Val3 Foo Val4, Val5, Val6 

J'ai besoin de l'écrire comme une seule requête, donc je ne pouvais pas utiliser COALESCE() pour la concaténation, car cela nécessiterait l'utilisation de variables et de loops.

Mon autre solution était d'utiliser le CTE récursif. Cependant, j'ai besoin de concaténer des valeurs pour 'Bar' et 'Foo'. J'ai pensé à CROSS APPLY mais je ne sais pas s'il est possible d'get ce résultat avec CROSS APPLY et CTE récursif.

Aucune suggestion?

 select distinct Col1, ( select STUFF((select ',' + col2 from yourtable b where b.col1 = a.col1 for xml path('')),1,1,'') ) as Col2 from yourtable a 

Essayez-le comme ceci:

 DECLARE @tbl TABLE(Col1 VARCHAR(100),Col2 VARCHAR(100)); INSERT INTO @tbl VALUES ('Bar','Val1') ,('Bar','Val2') ,('Bar','Val3') ,('Foo','Val4') ,('Foo','Val5') ,('Foo','Val6'); SELECT DISTINCT Col1,Concatenated.Col2 FROM @tbl AS tbl CROSS APPLY( SELECT STUFF ( ( SELECT ', ' + Col2 FROM @tbl AS InnerTbl WHERE InnerTbl.Col1=tbl.Col1 FOR XML PATH('') ) ,1,2,'') ) AS Concatenated(Col2) /* Result Col1 Col2 Bar Val1, Val2, Val3 Foo Val4, Val5, Val6 */