Heim > Datenbank > MySQL-Tutorial > Wie zerlege ich durch Kommas getrennte Spalten mithilfe von DB2 SQL in Zeilen?

Wie zerlege ich durch Kommas getrennte Spalten mithilfe von DB2 SQL in Zeilen?

Patricia Arquette
Freigeben: 2024-12-20 08:40:09
Original
360 Leute haben es durchsucht

How to Break Down Comma-Separated Columns into Rows Using DB2 SQL?

Durch Kommas getrennte Spalten in Zeilen mit DB2 aufteilen

Im Bereich der Datenbankverwaltung kann der Umgang mit durch Kommas getrennten Werten oft ein Problem darstellen Eine Herausforderung, insbesondere wenn es darum geht, einzelne Werte in separate Zeilen zu extrahieren. Ein solches Szenario entsteht, wenn eine Tabelle eine Spalte mit durch Kommas getrennten Verweisen enthält und die Notwendigkeit besteht, diese Verweise in einzelne Zeilen aufzuteilen.

Problemstellung

Bedenken Sie a Tabelle mit folgender Struktur:

Id | FK_ID | Reference
-----------------------
1 | 2100 | GI2, GI32
2 | 2344 | GI56
Nach dem Login kopieren

Ziel ist es, diese Daten in die folgenden gewünschten Werte umzuwandeln Ausgabe:

Id | FK_ID | Reference
-----------------------
1 | 2100 | GI2
2 | 2100 | GI32
3 | 2344 | GI56
Nach dem Login kopieren

DB2-Lösung

Um diese Datentransformation zu erreichen, stellt DB2 eine rekursive SQL-Anweisung bereit, die die durch Kommas getrennten Werte iterativ in einzelne Zeilen aufteilt. Die Lösung nutzt den folgenden SQL-Code:

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

Erklärung

Dieser rekursive CTE (Common Table Expression) mit dem Namen unpivot verwendet die UNION ALL-Klausel, um die Referenz iterativ aufzuteilen Spalte in einzelne Werte:

  • lvl stellt die Rekursionsebene dar, die sicherstellt, dass die Der Aufteilungsprozess endet nach maximal 100 Ebenen.
  • Die erste Zeile des CTE wählt das erste Token aus der Referenzspalte als Anfangswert für die Referenz und den Rest der Zeichenfolge als Ende aus.
  • Die nachfolgenden Zeilen verwenden das Ende der vorherigen Zeile als Referenz und wiederholen den Aufteilungsvorgang, bis das Ende leer ist oder die maximale Rekursionsebene erreicht ist erreicht.
  • Schließlich extrahiert die SELECT-Anweisung außerhalb des CTE die gewünschten ID-, fk_ref- und Referenzspalten aus dem Unpivot-CTE.

Hinweis:

Es ist wichtig, das Speichern von Daten in einem durch Kommas getrennten Format zu vermeiden, da dies zu Problemen mit der Datenintegrität und Datenverlust führen kann Manipulation und Abfrage komplexer. Die bereitgestellte Lösung bietet jedoch eine Möglichkeit, solche Daten in Fällen, in denen dies unvermeidlich oder notwendig ist, in ein besser verwaltbares und benutzerfreundlicheres Format umzuwandeln.

Das obige ist der detaillierte Inhalt vonWie zerlege ich durch Kommas getrennte Spalten mithilfe von DB2 SQL in Zeilen?. 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