当前位置:  开发笔记 > 编程语言 > 正文

Oracle-根据列值将单行拆分为多行

如何解决《Oracle-根据列值将单行拆分为多行》经验,为你挑选了1个好方法。

我有这样的桌子

parent_item  child_item  quantity
          A           B         2
          A           C         3
          B           E         1
          B           F         2

并希望根据数量将其分成多行

parent_item  child_item  quantity
         A            B         1
         A            B         1
         A            C         1
         A            C         1
         A            C         1
         B            E         1
         B            F         1
         B            F         1

The column quantity (1) is not really necessary.

我可以在/ by-level的帮助下生成一些东西,但是对于大型表来说非常慢。我对/ by-connect的连接不是很熟悉,但这似乎可行,尽管我无法真正解释:

select distinct parent_item, level LEVEL_TAG, child_item, level||quantity
FROM table
CONNECT BY quantity>=level
order by 1 asc;

我发现了类似的问题,但在大多数情况下,topicstarter希望将定界的列值拆分为多行(Oracle- 将单行拆分为多行)

解决此问题的最有效方法是什么?

谢谢



1> MT0..:

使用递归子查询分解子句:

WITH split ( parent_item, child_item, lvl, quantity ) AS (
  SELECT parent_item, child_item, 1, quantity
  FROM   your_table
UNION ALL
  SELECT parent_item, child_item, lvl + 1, quantity
  FROM   split
  WHERE  lvl < quantity
)
SELECT parent_item, child_item, 1 As quantity
FROM   split;

或者,您可以使用相关的分层查询:

SELECT t.parent_item, t.child_item, 1 AS quantity
FROM   your_table t,
       TABLE(
         CAST(
           MULTISET(
             SELECT LEVEL
             FROM DUAL
             CONNECT BY LEVEL <= t.quantity
           )
           AS SYS.ODCINUMBERLIST
         )
       ) l;

至于哪种性能更好-请尝试对不同的解决方案进行基准测试,因为我们无法告诉您在您的系统上哪种性能更好。

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有