Maison >base de données >tutoriel mysql >Comment diviser les colonnes séparées par des virgules en lignes à l'aide de DB2 SQL ?
Décomposer les colonnes séparées par des virgules en lignes avec DB2
Dans le domaine de la gestion de bases de données, la gestion des valeurs séparées par des virgules peut souvent poser un problème un défi, en particulier lorsqu'il s'agit d'extraire des valeurs individuelles dans des lignes distinctes. Un tel scénario se produit lorsqu'un tableau contient une colonne avec des références séparées par des virgules et qu'il est nécessaire de diviser ces références en lignes individuelles.
Énoncé du problème
Envisagez un tableau avec la structure suivante :
Id | FK_ID | Reference ----------------------- 1 | 2100 | GI2, GI32 2 | 2344 | GI56
Le but est de transformer ces données en ce qui suit souhaité sortie :
Id | FK_ID | Reference ----------------------- 1 | 2100 | GI2 2 | 2100 | GI32 3 | 2344 | GI56
Solution DB2
Pour réaliser cette transformation de données, DB2 fournit une instruction SQL récursive qui divise de manière itérative les valeurs séparées par des virgules en lignes individuelles. La solution exploite le code SQL suivant :
WITH unpivot (lvl, id, fk_ref, reference, tail) AS ( SELECT 1, id, fk_ref, CASE WHEN LOCATE(',',reference) > 0 THEN TRIM(LEFT(reference, LOCATE(',',reference)-1)) ELSE TRIM(reference) END, CASE WHEN LOCATE(',',reference) > 0 THEN SUBSTR(reference, LOCATE(',',reference)+1) ELSE '' END FROM yourtable UNION ALL SELECT lvl + 1, id, fk_ref, CASE WHEN LOCATE(',', tail) > 0 THEN TRIM(LEFT(tail, LOCATE(',', tail)-1)) ELSE TRIM(tail) END, CASE WHEN LOCATE(',', tail) > 0 THEN SUBSTR(tail, LOCATE(',', tail)+1) ELSE '' END FROM unpivot WHERE lvl < 100 AND tail != '') SELECT id, fk_ref, reference FROM unpivot
Explication
Ce CTE (Common Table Expression) récursif nommé unpivot utilise la clause UNION ALL pour diviser de manière itérative la référence colonne en valeurs individuelles :
Remarque :
Il est important d'éviter de stocker des données dans un format séparé par des virgules, car cela peut entraîner des problèmes d’intégrité des données et rendre la manipulation et l’interrogation des données plus complexes. Cependant, la solution fournie offre un moyen de transformer ces données dans un format plus gérable et utilisable dans les cas où cela est inévitable ou nécessaire.
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!