之前,为了把某一字段的值按某种分组在SQL语句里拼接成一个字符串,一般要先写一个函数,然后在SQL语句里调用该函数才能达到这个目的。
后来了解了oracle提供的sys_connect_by_path,觉得可以利用该功能实现,下面是实现的示例代码:
select deptno, sys_connect_by_path(ename, '+') ename_str
from(select deptno, ename,
count(empno) over(partition by deptno) c,
row_number() over(partition by deptno order by deptno) r
from scott.emp)
where c = r
start with r = 1
connect by (prior r = r - 1 and prior deptno = deptno)FROM里面的语句执行结果:
SQL> select deptno, ename,
2 count(empno) over(partition by deptno) c,
3 row_number() over(partition by deptno order by ename) r
4 from scott.emp
5 /
DEPTNO ENAME C R
------ ---------- ---------- ----------
10 CLARK 3 1
10 KING 3 2
10 MILLER 3 3
20 ADAMS 5 1
20 FORD 5 2
20 JONES 5 3
20 SCOTT 5 4
20 SMITH 5 5
30 ALLEN 6 1
30 BLAKE 6 2
30 JAMES 6 3
30 MARTIN 6 4
30 TURNER 6 5
30 WARD 6 6
14 rows selected
最后执行结果:
SQL> select deptno, sys_connect_by_path(ename, '+') ename_str
2 from(select deptno, ename,
3 count(empno) over(partition by deptno) c,
4 row_number() over(partition by deptno order by ename) r
5 from scott.emp)
6 where c = r
7 start with r = 1
8 connect by (prior r = r - 1 and prior deptno = deptno)
9 /
DEPTNO ENAME_STR
------ --------------------------------------------------------------------------------
10 +CLARK+KING+MILLER
20 +ADAMS+FORD+JONES+SCOTT+SMITH
30 +ALLEN+BLAKE+JAMES+MARTIN+TURNER+WARD
本文介绍如何使用 Oracle 的 sys_connect_by_path 函数进行分组字段的字符串拼接操作。通过示例展示了如何将相同部门的员工名字用特定符号连接起来。
1259

被折叠的 条评论
为什么被折叠?



