Concaténation de valeurs basées sur l'ID
Cette question cherche à transformer une table avec plusieurs lignes par ID et une seule colonne « Étiquette » en un table avec une ligne par ID et une colonne 'Label' concaténée. Chaque étiquette doit être séparée par des virgules.
Les données fournies sont constituées des observations suivantes :
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 |
Le résultat souhaité est :
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 |
Pour réaliser cette transformation , l'extrait de code suivant peut être utilisé :
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
La sous-requête de la fonction 'stuff' utilise la concaténation via le Opérateur ' ' et méthodes XML pour gérer la combinaison d'étiquettes. La fonction 'value' du paramètre 'type' convertit la sortie XML en un type varchar(max) pour garantir un affichage correct des résultats concaténés.
Veuillez noter que sans une instruction order by dans la sous-requête, l'ordre des résultats concaténés les cordes ne peuvent pas être garanties.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!