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

前端之家收集整理的这篇文章主要介绍了sql – 如何将逗号分隔列转换为db2中的多个行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有下表(引用的数量是可变的):
  1. Id | FK_ID| Reference |
  2. -----------------------
  3. 1 2100 GI2,GI32
  4. 2 2344 GI56

我需要以下结果:

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

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

解决方法

你真的不应该存储这样的数据.幸运的是,有一种方法可以通过递归sql来消除损坏,具体如下:
  1. WITH unpivot (lvl,id,fk_ref,reference,tail) AS (
  2. SELECT 1,CASE WHEN LOCATE(',',reference) > 0
  3. THEN TRIM(LEFT(reference,LOCATE(',reference)-1))
  4. ELSE TRIM(reference)
  5. END,reference) > 0
  6. THEN SUBSTR(reference,reference)+1)
  7. ELSE ''
  8. END
  9. FROM yourtable
  10. UNION ALL
  11. SELECT lvl + 1,tail) > 0
  12. THEN TRIM(LEFT(tail,tail)-1))
  13. ELSE TRIM(tail)
  14. END,tail) > 0
  15. THEN SUBSTR(tail,tail)+1)
  16. ELSE ''
  17. END
  18. FROM unpivot
  19. WHERE lvl < 100 AND tail != '')
  20. SELECT id,reference FROM unpivot

PS.未经测试.

猜你在找的MsSQL相关文章