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

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

DDD
DDD原创
2024-12-18 02:48:10159浏览

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