同事想将公式表中的竖着存储的几条公式全部连接到一个串中,使用wm_cancat 函数一条语句就能实现,响应速度也很快。但是随后的问题来了,虽然可以把一个指标的公式都连接到一个串中,但是公式的顺序不能保证正确。
select zb_lsm,zt_lsm,wm_concat(zb)
from t1
where tsbs='1'
group by zb_lsm,zt_lsm;
结果为:(其中公式的各项用逗号分开)
1 0023 zt0284 60005085E0605200005471012101,1000,*
2 0039 zt0284 60007065E0605200016101012101,1000,*
3 0051 zt0284 60005085E0605200005411012101,1000,*
4 0115 GS036 jjzb000170,jjzb000170,/
5 0115 GS037 nhzb935,10000,*
6 0115 GS038 nhzb949,10000,*
7 cz0005 ZZ00 40000411,10000,/
8 cz0009 ZZ00 (,10000,/,),60010237D060520000962,+,60002000D060520000172
SELECT zb_lsm,zt_lsm, MAX(LTRIM(SYS_CONNECT_BY_PATH(xh||'-'||zb, ','), ',')) zb
FROM
(
SELECT zb_lsm,zt_lsm,xh,zb, ROW_NUMBER() OVER (PARTITION BY zb_lsm ORDER BY zb_lsm,zt_lsm,xh) RN
FROM t1 --
where --zb_lsm='11002460' and zt_lsm='cz061' and
tsbs='1'
)
START WITH RN = 1
CONNECT BY PRIOR RN + 1 = RN
AND PRIOR zb_lsm = zb_lsm and zt_lsm=zt_lsm
GROUP BY zb_lsm,zt_lsm;
--(其中公式的各项前面添加了相应的序号,用逗号分开)
但是这个语句响应速度相应比较慢,数据量大了还会出现ora_01489 字符串连接结果过长。
经过查找,还真有不少人问这个问题,综合一下,解决方法如下:一种更改方法,更改wm_concat的定义方法,另外一种方法就是使用别的方法。最后改写下语句如下,28万条语句也能几秒出结果:
----最终语句 OK 28万条语句也能几秒出结果 ---
with test as(
select zb_lsm ,zt_lsm ,zb value,xh,tsbs
--,ROW_NUMBER() OVER(PARTITION BY zb_lsm,zt_lsm ORDER BY xh) RN
from t1
where --zb_lsm in ('0200000003') and zt_lsm in ('A031300001','A031300015') and
tsbs='1'
-- and rownum<100
order by zb_lsm,zt_lsm,xh )
select zb_lsm,zt_lsm,value from (
select zb_lsm,zt_lsm,
WMSYS.WM_CONCAT(xh||'--'||value) OVER(PARTITION BY zb_lsm,zt_lsm ORDER BY xh) value
,row_number() over(PARTITION BY zb_lsm,zt_lsm ORDER BY xh desc) rs
from test --group by zb_lsm,zt_lsm
)
--order by rs
where rs=1;
--(其中公式的各项前面添加了相应的序号,用逗号分开)
输出结果:
1 0023 zt0284 1--60005085E0605200005471012101,2--*,3--1000
2 0039 zt0284 1--60007065E0605200016101012101,2--*,3--1000
3 0051 zt0284 1--60005085E0605200005411012101,2--*,3--1000
4 0115 GS036 1--jjzb000170,2--/,3--jjzb000170
5 0115 GS037 1--nhzb935,2--*,3--10000
6 0115 GS038 1--nhzb949,2--*,3--10000
7 01zztrcc0301101210101 GS216 1--01zztrcc0301101210101,1--01zztrcc0301101210101
8 01zztrcc0301101210101 GS217 1--01zztrcc0301101210101,1--01zztrcc0301101210101
9 01zztrcc0301101210101 GS218 1--01zztrcc0301101210101,1--01zztrcc0301101210101
10 01zztrcc0301101210101 hyphb5 1--01zztrcc0301101210101
11 01zztrcc0401101210101 GS216 1--01zztrcc0401101210101,1--01zztrcc0401101210101
12 01zztrcc0401101210101 GS217 1--01zztrcc0401101210101,1--01zztrcc0401101210101
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-746715/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7177735/viewspace-746715/