Valori concatenati in base all’ID

Ho una tabella chiamata Risultati e i dati sono simili a:

Response_ID Label 12147 It was not clear 12458 Did not Undersstand 12458 Was not resolved 12458 Did not communicate 12586 Spoke too fast 12587 Too slow 

Ora voglio che l’output visualizzi una riga per ID e che i valori dell’etichetta siano concatenati e separati dalla virgola

Il mio risultato dovrebbe essere simile a:

 Response_ID Label 12147 It was not clear 12458 Did not Undersstand,Was not resolved,Did not communicate 12586 Spoke too fast 12587 Too Slow 

Come posso fare questo:

Non si può essere sicuri circa l’ordine delle stringhe concatenate senza un ordine per istruzione nella subquery. La parte .value('.', 'varchar(max)') è lì per gestire il caso in cui Label contiene caratteri ostili all’XML come & .

 declare @T table(Response_ID int, Label varchar(50)) insert into @T values (12147, 'It was not clear'), (12458, 'Did not Undersstand'), (12458, 'Was not resolved'), (12458, 'Did not communicate'), (12586, 'Spoke too fast'), (12587, 'Too slow') select T1.Response_ID, stuff((select ','+T2.Label from @T as T2 where T1.Response_ID = T2.Response_ID for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label from @T as T1 group by T1.Response_ID 

Controlla il link sottostante, si avvicina al tuo problema con molte soluzioni diverse

http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

 DECLARE @Results TABLE(Response_ID INT, Label VARCHAR(80)); INSERT @Results(Response_ID, Label) SELECT 12147,'It was not clear' UNION SELECT 12458,'Did not Undersstand' UNION SELECT 12458,'Was not resolved' UNION SELECT 12458,'Did not communicate' UNION SELECT 12586,'Spoke too fast' UNION SELECT 12587,'Too slow'; WITH x AS ( SELECT Response_ID FROM @Results GROUP BY Response_ID ) SELECT x.Response_ID, Label = STUFF((SELECT ',' + Label FROM @Results WHERE Response_ID = x.Response_ID FOR XML PATH('')), 1, 1, '') FROM x; 

Considera questo, è molto performante:

http://jerrytech.blogspot.com/2010/04/tsql-concatenate-strings-1-2-3-and.html

Evita le funzioni XML perché non sono performanti.

Ciò richiederà alcuni sforzi per implementare, ma milioni di righe => millisecondi per l’esecuzione.