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
Libérer: 2024-12-18 02:48:10
original
222 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal