首页 > 数据库 > mysql教程 > 如何使用递归 SQL 在 DB2 中逆透视逗号分隔的数据?

如何使用递归 SQL 在 DB2 中逆透视逗号分隔的数据?

Susan Sarandon
发布: 2024-12-31 12:51:11
原创
235 人浏览过

How to Unpivot Comma-Separated Data in DB2 Using Recursive SQL?

在 DB2 中反转逗号分隔的数据

在数据库设计中,将多个引用存储在以逗号分隔的单个列中是不明智的。这种做法可能会导致效率低下和数据不一致。但是,可能会出现这样的情况:您继承了具有此类数据结构的数据库,因此有必要将其转换为规范化形式。

要在 DB2 中取消转置逗号分隔的数据,您可以利用递归 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
登录后复制

此查询将以逗号分隔的内容逆透视为单独的行。它使用递归来迭代尾部(剩余未处理的引用)并生成新行,只要有逗号且级别(递归深度)小于 100。

注意:此查询尚未经过测试,可能需要调整才能在您的特定环境中工作。

以上是如何使用递归 SQL 在 DB2 中逆透视逗号分隔的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

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