繁体   English   中英

没有listagg函数的查询

[英]Query without listagg function

有人可以在不使用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功能的情况下编写查询?

对的,这是可能的。

您可以使用分层查询。

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);

不可以,除非您想使用PLSQL来实现。 正是出于这个原因而创建了LISTAGG,以实现该输出。 让甲骨文为您完成繁重的工作

查看XMLAGG功能。 链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM