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

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

Linda Hamilton
發布: 2024-12-25 15:21:10
原創
686 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板