在Oracle SQL中运行列值的串联

维诺特·卡西克(Vinoth Karthick)

我有如下表结构

create table emp ( empno number,dept_no varchar(4));
insert into emp VALUES  (1,'A');
insert into emp  VALUES (1,'B');
insert into emp  VALUES (1,'C');
insert into emp  VALUES (1,'D');
insert into emp  VALUES (2,'P');
insert into emp  VALUES (2,'Q');
insert into emp  VALUES (2,'R');
insert into emp  VALUES (2,'S');

我需要如下输出

1, A
1, A,B
1, A,B,C
1, A,B,C,D
2, P
2, P,Q
2, P,Q,R
2, P,Q,R,S

我可以使用PL / SQL Block来实现这一点,但是我们是否有可能通过sql来实现呢?

专线小巴

这是的任务listagg()不幸的是,尽管它可以用作窗口功能,但它不支持order bywindow选项,这在这里是必需的。

解决此问题的一种方法是使用相关子查询:

select 
    e.empno,
    (
            select listagg(e1.dept_no, ',') within group(order by e1.dept_no)
            from emp e1
            where e1.empno = e.empno and e1.dept_no <= e.dept_no            
    ) depts
from emp e

DB Fiddlde上的演示

EMPNO | 部门  
----:| :------ 
    1 | A       
    1 | A,B     
    1 | A,B,C   
    1 | A,B,C,D 
    2 | P       
    2 | P,Q     
    2 | P,Q,R   
    2 | P,Q,R,S

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章