Retour groupé plusieurs colonnes concaténées dans une colonne de string délimitée par des virgules

J'ai le tableau suivant

Year, Category, CarID, CarName, Milage -------------------------------------------- 2012 GroupA 1 Porsche 100 2012 GroupA 2 Mercedes 200 2013 GroupA 3 Ferrari 300 2013 GroupB 4 Uno 200 2013 GroupB 5 Beetle 200 

Je souhaite générer un regroupement par année et par catégorie et renvoyer les noms de voitures et le kilométrage dans une colonne d'affichage

 Year, Category, DisplaySsortingng -------------------------------------------- 2012 GroupA Mercedes (200km), Porsche (100km) 2013 GroupA Ferrari (300km) 2013 GroupB Beetle (200km), Uno (200km) 

J'essaye de combiner des colonnes à la string délimitée par des virgules avec un groupe par ainsi que plus d'une colonne de type concaténée mais je ne suis pas sûr de savoir comment procéder. J'utilise SQL Server 2012.

 Select A.* ,DistplaySsortingng = (Select Stuff((Select Distinct concat(', ',CarName,' (',Milage,'km)') From YourTable Where Year=A.Year and Category=A.Category For XML Path ('')),1,2,'') ) From (Select Distinct Year, Category From YourTable) A 

Retours (Merci à la variable de table d'Alan +1)

 Year Category DistplaySsortingng 2012 GroupA Mercedes (200km), Porsche (100km) 2013 GroupA Ferrari (300km) 2013 GroupB Beetle (200km), Uno (200km) 

John m'a battu à ça. C'est à peu près la même solution sous le capot.

 -- Your Sample Data DECLARE @yourtable TABLE ( [year] smallint, category varchar(10), CarID int, CarName varchar(20), Milage int ); INSERT @yourtable VALUES (2012,'GroupA',1,'Porsche', 100), (2012,'GroupA',2,'Mercedes', 200), (2013,'GroupA',3,'Ferrari', 300), (2013,'GroupB',4,'Uno', 200), (2013,'GroupB',5,'Beetle', 200); -- Solution SELECT [Year], Category, DisplaySsortingng = STUFF (( SELECT CONCAT(', ', Carname, ' (', milage, 'km)') FROM @yourtable i WHERE o.[year] = i.[year] AND o.category = i.category FOR XML PATH('') ),1,2,'') FROM @yourtable o GROUP BY [year], category; 

Résultats:

 Year Category DisplaySsortingng ------ ---------- --------------------------------- 2012 GroupA Porsche (100km), Mercedes (200km) 2013 GroupA Ferrari (300km) 2013 GroupB Uno (200km), Beetle (200km)