Maison >base de données >tutoriel mysql >Comment annuler le pivotement des données séparées par des virgules dans DB2 à l'aide de SQL récursif ?
Données non pivotantes séparées par des virgules dans DB2
Dans la conception de bases de données, il est imprudent de stocker plusieurs références dans une seule colonne séparées par des virgules. Cette pratique peut conduire à des inefficacités et à des incohérences des données. Cependant, des situations peuvent survenir dans lesquelles vous héritez d'une base de données avec une telle structure de données, ce qui nécessite de la transformer en une forme normalisée.
Pour annuler le pivotement des données séparées par des virgules dans DB2, vous pouvez exploiter le SQL récursif. La requête suivante fournit une solution :
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 du contenu séparé par des virgules en lignes individuelles. Il utilise la récursivité pour parcourir la queue (références non traitées restantes) et générer de nouvelles lignes tant qu'il y a des virgules et que le niveau (profondeur de récursion) est inférieur à 100.
Remarque : Cette requête n'a pas été testée et peut nécessiter des ajustements pour fonctionner dans votre environnement spécifique.
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!