如何将逗号分隔列转换为db2中的多个行

was*_*IBM 3 sql db2 transform function rows

我有下表(引用的数量是可变的):

Id | FK_ID| Reference |
-----------------------
1    2100   GI2, GI32
2    2344   GI56
Run Code Online (Sandbox Code Playgroud)

我需要以下结果:

Id | FK_ID| Reference |
-----------------------
1    2100   GI2 
2    2100   GI32
3    2344   GI56
Run Code Online (Sandbox Code Playgroud)

有没有使用DB2转换数据的简短方法?

mus*_*cio 6

你真的不应该存储这样的数据.幸运的是,有一种方法可以通过递归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
Run Code Online (Sandbox Code Playgroud)

PS.没有测试过.