有人可以帮助我在不使用listagg函数的情况下获得所需的输出。
要求: 编写查询以获取job_id和相关员工的ID。
Output:
jobname Empno
AC_ACCOUNT 206
AC_MGR 205
AD_ASST 200
AD_PRES 100
AD_VP 101,102
FI_ACCOUNT 110 ,113 ,111 ,109 ,112
我已经实现了使用listagg函数。
select jobname, listagg(empno, ',') within group (order by empno) empno
from emp group by jobname;
但我想知道是否可以在不使用listagg功能的情况下编写查询?
答案 0 :(得分:2)
是的,这是可能的。
您可以使用分层查询。
with sel as (
select job_id, employee_id
from employees
order by job_id, employee_id)
, sel2 as (
select rownum r, job_id, employee_id
from sel)
, sel3 as (
select sel2.*, ltrim(sys_connect_by_path (employee_id,','),',') res, level l
from sel2
connect by prior job_id=job_id and r=prior r+1
order by job_id)
select job_id, res
from sel3 s
where l = (select max(l) from sel3 where job_id=s.job_id);
答案 1 :(得分:1)
不,除非您想使用PLSQL实现这一目标。 LISTAGG就是出于这个原因而创建的,以实现这一目标。让oracle为你做重物
答案 2 :(得分:1)
查看XMLAGG功能。 link