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 ?

Comment annuler le pivotement des colonnes séparées par des virgules dans DB2 à l'aide de SQL récursif ?

DDD
DDDoriginal
2024-12-18 02:48:10156parcourir

How to Unpivot Comma-Separated Columns in DB2 Using Recursive SQL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn