首页 > 数据库 > mysql教程 > 如何使用递归 SQL 在 DB2 中反转逗号分隔列?

如何使用递归 SQL 在 DB2 中反转逗号分隔列?

DDD
发布: 2024-12-18 02:48:10
原创
236 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板