Heim >Datenbank >MySQL-Tutorial >Wie entpivotiere ich durch Kommas getrennte Daten in DB2 mithilfe von rekursivem SQL?
Entpivotieren von durch Kommas getrennten Daten in DB2
Beim Datenbankdesign ist es unklug, mehrere Referenzen in einer einzigen, durch Kommas getrennten Spalte zu speichern. Diese Praxis kann zu Ineffizienzen und Dateninkonsistenzen führen. Es kann jedoch vorkommen, dass Sie eine Datenbank mit einer solchen Datenstruktur erben, sodass es erforderlich ist, sie in eine normalisierte Form umzuwandeln.
Um die Pivotierung von durch Kommas getrennten Daten in DB2 aufzuheben, können Sie rekursives SQL nutzen. Die folgende Abfrage bietet eine Lösung:
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
Diese Abfrage entpivotiert den durch Kommas getrennten Inhalt in einzelne Zeilen. Es verwendet Rekursion, um das Ende (verbleibende unverarbeitete Referenzen) zu durchlaufen und neue Zeilen zu generieren, solange Kommas vorhanden sind und die Ebene (Rekursionstiefe) weniger als 100 beträgt.
Hinweis: Diese Abfrage wurde nicht getestet und erfordert möglicherweise Anpassungen, damit sie in Ihrer spezifischen Umgebung funktioniert.
Das obige ist der detaillierte Inhalt vonWie entpivotiere ich durch Kommas getrennte Daten in DB2 mithilfe von rekursivem SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!