首頁 >資料庫 >mysql教程 >如何在 Db2 中將逗號分隔值逆透視為多行?

如何在 Db2 中將逗號分隔值逆透視為多行?

Linda Hamilton
Linda Hamilton原創
2024-12-25 15:21:10686瀏覽

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

如何在Db2 中將逗號分隔的列轉換為多行

許多應用程式需要將資料儲存在關聯表結構中,其中每筆記錄代表一個唯一的實體及其屬性。然而,有時資料的結構可能不同,例如在單列中採用逗號分隔的格式。將此類資料轉換為關係結構可能具有挑戰性,但 Db2 提供了使用遞歸 SQL 的解決方案。

讓我們考慮一個範例,其中表格包含具有逗號分隔值的欄位:

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

我們的目標是將這些資料轉換為具有多行的表,其中每一行代表一個不同的參考:

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

下面的遞歸SQL查詢實現了此轉換:

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

此查詢逆透視並迭代地將逗號分隔的值拆分為單獨的行。結果是所需格式的關係表。注意:查詢尚未經過測試,可能需要進行細微調整。

以上是如何在 Db2 中將逗號分隔值逆透視為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn