Joindre des colonnes de données délimitées par des virgules
Pour joindre deux tables contenant des colonnes de données délimitées par des virgules, envisagez les approches suivantes :
Normalisation
Normaliser le tableau contenant les valeurs séparées par des virgules en créant un tableau séparé avec une colonne pour chaque valeur. Cela simplifie les requêtes et évite les manipulations complexes de chaînes.
Créer une fonction de fractionnement
Créez une fonction de fractionnement qui convertit la chaîne séparée par des virgules en lignes individuelles. Cela vous permet d'effectuer des jointures sur les lignes.
Utilisez FOR XML PATH et STUFF
Utilisez FOR XML PATH pour concaténer les valeurs dans une chaîne séparée par des virgules et STUFF pour supprimer la virgule de début.
Appliquer directement POUR XML PATH
Appliquer FOR XML PATH directement aux données pour générer la sortie souhaitée.
Exemples
Fonction de fractionnement avec concaténation
;with cte as ( select c.col1, t1.col2 from t1 inner join ( select t2.col1, i.items col2 from t2 cross apply dbo.split(t2.col2, ',') i ) c on t1.col1 = c.col2 ) select distinct c.col1, STUFF( (SELECT distinct ', ' + c1.col2 FROM cte c1 where c.col1 = c1.col1 FOR XML PATH ('')), 1, 1, '') col2 from cte c
POUR XML CHEMIN et TRUC
select col1, ( select ', '+t1.col2 from t1 where ','+t2.col2+',' like '%,'+cast(t1.col1 as varchar(10))+',%' for xml path(''), type ).value('substring(text()[1], 3)', 'varchar(max)') as col2 from t2;
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!