Heim >Datenbank >MySQL-Tutorial >Wie entpivotiere ich durch Kommas getrennte Werte in mehrere Zeilen in Db2?

Wie entpivotiere ich durch Kommas getrennte Werte in mehrere Zeilen in Db2?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 15:21:10677Durchsuche

How to Unpivot Comma-Separated Values into Multiple Rows in Db2?

So konvertieren Sie durch Kommas getrennte Spalten in mehrere Zeilen in Db2

Viele Anwendungen erfordern die Speicherung von Daten in einer relationalen Tabellenstruktur Jeder Datensatz stellt eine eindeutige Entität und ihre Attribute dar. Allerdings können Daten manchmal anders strukturiert sein, beispielsweise in einem durch Kommas getrennten Format innerhalb einer einzelnen Spalte. Solche Daten in eine relationale Struktur umzuwandeln kann eine Herausforderung sein, aber Db2 bietet eine Lösung mit rekursivem SQL.

Betrachten wir ein Beispiel, in dem eine Tabelle eine Spalte mit durch Kommas getrennten Werten enthält:

Id | FK_ID | Reference
-----------------------
1    2100   GI2, GI32
2    2344   GI56

Unser Ziel ist es, diese Daten in eine Tabelle mit mehreren Zeilen umzuwandeln, wobei jede Zeile etwas anderes darstellt Referenz:

Id | FK_ID | Reference
-----------------------
1    2100   GI2
2    2100   GI32
3    2344   GI56

Die folgende rekursive SQL-Abfrage erreicht diese 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

Diese Abfrage hebt die Pivotierung auf und teilt die durch Kommas getrennten Werte iterativ in separate Zeilen auf. Das Ergebnis ist eine relationale Tabelle im gewünschten Format. Hinweis: Die Abfrage wurde nicht getestet und erfordert möglicherweise geringfügige Anpassungen.

Das obige ist der detaillierte Inhalt vonWie entpivotiere ich durch Kommas getrennte Werte in mehrere Zeilen in Db2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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