SQL Server: Grouper par concaténation de string

J'ai une question. Je sais que cela a déjà été demandé. J'ai regardé les questions connexes mais je n'ai pas réussi à faire fonctionner mon script SQL.

Voici ma requête:

SELECT T1.PART_ID, T2.ID, T2.DESCRIPTION FROM #TEMP T1 INNER JOIN #TEMP2 T2 ON T1.PART_ID = T2.PART_ID ORDER BY T2.ID 

Table:

 PART_ID | ID | DESCRIPTION ---------------------------------- 10002 | 1182505 | Tagfahrlichtschaltung 80029 | 1182505 | Bluetooth 20004 | 1212866 | Kindersitzbefestigung 10045 | 1212866 | Lederlenkradrriegelung 11908 | 1257946 | Airbag 22346 | 1257946 | Automatic 

Je veux avoir le résultat comme:

 ID | LISTOFPARTS ----------------------------- 1182505 | "10002 : Tagfahrlichtschaltung ; 80029 : Bluetooth " 1212866 | "20004 : Kindersitzbefestigung ; 10045 : Lederlenkradrriegelung" 1257946 | "11908 : AIRBAG ; 22346 : AUTOMATIC" 

Je suppose que cela doit être quelque chose avec XML PATH mais je ne pouvais pas le faire fonctionner. Quelqu'un pourrait-il réécrire la requête pour qu'elle renvoie les résultats groupés et concaténés en string?

Des solutions avec ou sans XML PATH seront appréciées.

Merci!

Cela fonctionnera –

 DECLARE @TABLE TABLE (PART_ID INT,ID INT, DESCRIPTION VARCHAR(100)) INSERT INTO @TABLE VALUES (10002 ,1182505 , 'Tagfahrlichtschaltung') ,(80029 , 1182505 , 'Bluetooth') ,(20004 , 1212866 , 'Kindersitzbefestigung') ,(10045 , 1212866 , 'Lederlenkradrriegelung') ,(11908 , 1257946 , 'Airbag') ,(22346 , 1257946 , 'Automatic') ;WITH SUBQUERY AS ( SELECT ID,(CAST(PART_ID AS VARCHAR(12)) + ' : ' + DESCRIPTION) 'CONCATED' FROM @TABLE ) SELECT ID, LEFT(pre_sortingmmed.CONCATED , LEN(pre_sortingmmed.CONCATED )-1) AS LISTOFPARTS FROM SUBQUERY AS extern CROSS APPLY ( SELECT CONCATED + ',' FROM SUBQUERY AS intern WHERE extern.ID = intern.ID FOR XML PATH('') ) pre_sortingmmed (CONCATED) GROUP BY ID, pre_sortingmmed.CONCATED 

http://sqlfiddle.com/#!3/d41d8/5441

 create table #Temp (PART_ID bigint, ID bigint, DESCRIPTION nvarchar(max)) insert into #Temp select 10002, 1182505, 'Tagfahrlichtschaltung' union all select 80029, 1182505, 'Bluetooth' union all select 20004, 1212866, 'Kindersitzbefestigung' union all select 10045, 1212866, 'Lederlenkradrriegelung' union all select 11908, 1257946, 'Airbag' union all select 22346, 1257946, 'Automatic' select T1.ID, stuff( ( select ' ; ' + cast(T2.PART_ID as nvarchar(max)) + ' : ' + T2.DESCRIPTION from #TEmp as T2 where T2.ID = T1.ID for xml path(''), type ).value('data(.)', 'nvarchar(max)') , 1, 3, '') as LISTOFPARTS from #TEMP as T1 group by T1.ID order by T1.ID