Comment convertir des colonnes séparées par des virgules en plusieurs lignes dans Db2
De nombreuses applications nécessitent que les données soient stockées dans une structure de table relationnelle, où chaque enregistrement représente une entité unique et ses attributs. Cependant, les données peuvent parfois être structurées différemment, par exemple dans un format séparé par des virgules au sein d'une seule colonne. Transformer de telles données en une structure relationnelle peut s'avérer difficile, mais Db2 propose une solution utilisant du SQL récursif.
Prenons un exemple dans lequel une table contient une colonne avec des valeurs séparées par des virgules :
Id | FK_ID | Reference ----------------------- 1 2100 GI2, GI32 2 2344 GI56
Notre objectif est de transformer ces données en un tableau à plusieurs lignes, où chaque ligne représente une référence distincte :
Id | FK_ID | Reference ----------------------- 1 2100 GI2 2 2100 GI32 3 2344 GI56
Le La requête SQL récursive ci-dessous réalise cette transformation :
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
Cette requête annule le pivotement et divise de manière itérative les valeurs séparées par des virgules en lignes distinctes. Le résultat est une table relationnelle au format souhaité. Remarque : la requête n'a pas été testée et peut nécessiter des ajustements mineurs.
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!