我有这样的桌子
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- 将单行拆分为多行)
解决此问题的最有效方法是什么?
谢谢
使用递归子查询分解子句:
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;
至于哪种性能更好-请尝试对不同的解决方案进行基准测试,因为我们无法告诉您在您的系统上哪种性能更好。