Maison >base de données >tutoriel mysql >Comment annuler le pivotement des colonnes séparées par des virgules dans DB2 à l'aide de SQL récursif ?
Les colonnes non pivotantes séparées par des virgules dans DB2
Le stockage de données avec des colonnes séparées par des virgules peut poser des problèmes. Cette requête montre comment transformer de telles données dans DB2 à l'aide de techniques SQL récursives.
Considérez la table initiale :
Id | FK_ID | Reference ----------------------- 1 2100 GI2, GI32 2 2344 GI56
Le résultat souhaité est de séparer les valeurs séparées par des virgules en plusieurs lignes :
Id | FK_ID | Reference ----------------------- 1 2100 GI2 2 2100 GI32 3 2344 GI56
En utilisant SQL récursif, nous pouvons y parvenir 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
Remarque : Cette solution suppose que le nombre de valeurs séparées par des virgules ne dépasse pas 99. L'ajustement de la condition lvl peut augmenter les valeurs prises en charge.
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!