我有如下表结构
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 by
window选项,这在这里是必需的。
解决此问题的一种方法是使用相关子查询:
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
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] 删除。
我来说两句