SELECT
tt.le,
tt.ITM,
MAX(tt.oid), -- 因为添加了分组,所以需要一个函数
MAX(tt.qty) qty
FROM (
with t as (
SELECT
rownum as rowIndex,
--这行必加,不然查询速度慢了数倍
v.oid,
v.itm,
v.qty --数量
FROM item v,
WHERE 1=1
)
select LEVEL as le,rownum,t.* from t connect by level <= t.qty
-- 根据 t.qty 数据量生成多行数数据
--到这一步其实已经拆分出来,但是他会生成很多重复的数据
) tt GROUP BY tt.ITM,tt.le ORDER BY tt.ITM
--根据层级和ID去掉重复的数据
因为实际需求中遇到了这问题,所以研究了一下,其中有些比较深的东西我也不是很清楚,比如为什么在查询语句中加上了 rownum 函数查询速度会变快等,希望有大佬可以解答一下。
有更好的方法可以在评论区留言,或者是对上面的语句有疑问的地方也可以留言问我。
外连: