Heim > Datenbank > MySQL-Tutorial > Wie entpivotiere ich durch Kommas getrennte Daten in DB2 mithilfe von rekursivem SQL?

Wie entpivotiere ich durch Kommas getrennte Daten in DB2 mithilfe von rekursivem SQL?

Susan Sarandon
Freigeben: 2024-12-31 12:51:11
Original
236 Leute haben es durchsucht

How to Unpivot Comma-Separated Data in DB2 Using Recursive 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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage