设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2021-02-20 08:43 所属栏目:116 来源:网络整理
导读:我有下表(引用的数量是可变的): Id | FK_ID| Reference |-----------------------1 2100 GI2,GI322 2344 GI56 我需要以下结果: Id | FK_ID| Reference |-----------------------1 2100 GI2 2 2100 GI323 2344 GI56 有没有使用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

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

解决方法

你真的不应该存储这样的数据.幸运的是,有一种方法可以通过递归SQL来消除损坏,具体如下:
WITH unpivot (lvl,id,fk_ref,reference,tail) AS (  
  SELECT 1,CASE WHEN LOCATE(',',reference) > 0 
              THEN TRIM(LEFT(reference,LOCATE(',reference)-1))
              ELSE TRIM(reference) 
         END,reference) > 0 
              THEN SUBSTR(reference,reference)+1)    
              ELSE '' 
         END  
  FROM yourtable  
  UNION ALL  
  SELECT lvl + 1,tail) > 0 
              THEN TRIM(LEFT(tail,tail)-1))    
              ELSE TRIM(tail) 
         END,tail) > 0 
              THEN SUBSTR(tail,tail)+1)    
              ELSE '' 
         END
  FROM unpivot 
  WHERE lvl < 100 AND tail != '')
  SELECT id,reference FROM unpivot

PS.未经测试.

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读