oracle 列转行-很慢-优化--ok
oracle 列转行-很慢-优化--ok
·
将一行数据变为多行,例如:
原始写法,效率很低,特别是数据量稍微大点时基本就跑不出来了
SELECT REGEXP_SUBSTR(A.ORDERID,'[^,]+', 1, LEVEL) AS ORDERID
FROM
(
SELECT ORDERID
FROM orders
WHERE INSTR(ORDERID,',')>0
AND BILLTYPE =1004
AND NVL(STATUS,0) =0
AND PERMIT =1
)
A CONNECT BY REGEXP_SUBSTR(A.ORDERID, '[^,]+', 1, LEVEL) IS NOT NULL
ORDERID
--------------------------------------------------------------------------------
89970,89962
90154,90145
90186,90187
优化后的写法
select distinct regexp_substr(t1.ORDERID, '[^,]+', 1, level) as ORDERID
from (SELECT id,ORDERID
FROM orders
WHERE INSTR(ORDERID,',')>0
AND BILLTYPE =1004
AND NVL(STATUS,0) =0
AND PERMIT =1
) t1
connect by t1.ID = prior t1.ID
and prior dbms_random.value is not null
and level <= length(t1.ORDERID) - length(regexp_replace(t1.ORDERID, ',', '')) + 1 ;
ORDERID
--------------------------------------------------------------------------------
89962
89970
90145
90154
90186
90187
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)