首頁 >資料庫 >mysql教程 >如何使用遞歸 SQL 在 DB2 中反轉逗號分隔列?

如何使用遞歸 SQL 在 DB2 中反轉逗號分隔列?

DDD
DDD原創
2024-12-18 02:48:10156瀏覽

How to Unpivot Comma-Separated Columns in DB2 Using Recursive SQL?

在 DB2 中取消轉置逗號分隔列

使用逗號分隔列的資料儲存可能會帶來挑戰。此查詢示範如何使用遞歸 SQL 技術在 DB2 中轉換此類資料。

考慮初始表:

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

注意:此方案假設逗號分隔值的數量不超過99。調整lvl條件可以增加支援的值。

以上是如何使用遞歸 SQL 在 DB2 中反轉逗號分隔列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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