SELECT LTRIM( MAX(SYS_CONNECT_BY_PATH(wo, ',')), ',') FROM (SELECT wo, RN, LEAD(RN) OVER(ORDER BY RN) RN1 FROM (SELECT wo, ROW_NUMBER() OVER(ORDER BY wo DESC) RN FROM ( SELECT
wi.workstep_name wo FROM workitem wi WHERE wi.status IN('I_ASSIGNED','I_AVAILABLE') and wi.process_instance_id=so.process_instance_id
) ) ) START WITH RN1 IS NULL CONNECT BY RN1 = PRIOR RN
) test FROM serviceordercpemacd so, processinstance pi WHERE so.process_instance_id=pi.process_instance_id
workitem wi WHERE wi.status IN('I_ASSIGNED','I_AVAILABLE') and wi.process_instance_id=so.process_instance_id
返回的结果可能只是一条或两条记录。 [最优解释] 哦。 SELECT pid, max(str) FROM (SELECT pid, sys_connect_by_path(wn, ',') AS str FROM (SELECT pid, wn, rn, lead(rn) over(PARTITION BY pid ORDER BY rn) rn1 FROM (SELECT pid, wn, row_number() over(ORDER BY pid) rn FROM (select t1.pid, t2.workstep_name as wn from serviceordermace t1 left join workitem t2 on t1.pid = t2.pid))) CONNECT BY rn1 = PRIOR rn) group by pid order by pid 写的太冲忙,自己调整下。 [其他解释] SELECT pid,LTRIM(MAX(SYS_CONNECT_BY_PATH(workstep_name,',')),',') workstep_name FROM ( SELECT serviceordermace.pid, workitem.workstep_name, ROW_NUMBER() OVER(PARTITION BY serviceordermace.pid ORDER BY workitem.workstep_name) GrepSeq FROM serviceordermace ,workitem WHERE workitem.pid=serviceordermace.pid ) START WITH GrepSeq=1 CONNECT BY PRIOR GrepSeq=GrepSeq-1 AND pid = PRIOR pid GROUP BY pid ORDER BY 1 [其他解释] 忘了说了,我不能用wm_concat()方法,只能用这种最传统的方法! [其他解释] 你比我早发了一分钟哈,也在线等呢哈,估计都快下班了大家都没心思了,老兄可否帮我看看我那问题
高手看过来啊,都折腾一天了,帮帮忙吧! [其他解释] WITH serviceordermace as ( SELECT '1' as pid from dual union all SELECT '2' as pid from dual union all SELECT '3' as pid from dual ), workitem as ( SELECT '1' as pid,'test1' AS workstep_name from dual union all SELECT '1' as pid,'test2' AS workstep_name from dual union all SELECT '2' as pid,'test3' AS workstep_name from dual union all SELECT '2' as pid,'test4' AS workstep_name from dual union all SELECT '2' as pid,'test5' AS workstep_name from dual union all SELECT '3' as pid,'test6' AS workstep_name from dual )
select pid,listagg(wn,',') within group(order by pid) as workstep_name from( select t1.pid,t2.workstep_name as wn from serviceordermace t1 left join workitem t2 on t1.pid = t2.pid) group by pid