listagg 使用说明

create table a100(deptno varchar2(10),ename varchar2(100));

SQL> set linesize 200
SQL> set pagesize 200
SQL> select * from a100;

DEPTNO    ENAME
---------- ----------------------------------------------------------------------------------------------------
10    SMITH
10    JONES
10    SCOTT
20    ADAMS
20    FORD
20    JORDAN

6 rows selected.



SQL> SELECT
  2   T .DEPTNO,
  3   listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names
  4  FROM
  5  a100 t
  6  group by deptno;

DEPTNO
----------
NAMES
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10
JONES,SCOTT,SMITH

20
ADAMS,FORD,JORDAN


create table a200(deptno varchar2(10),ename varchar2(100),salary varchar2(100));

SQL> select * from a200 ;

DEPTNO    ENAME   SALARY
---------- ------------------------------ ----------------------------------------------------------------------------------------------------
10    SMITH   100
10    JONES   200
10    SCOTT   50
20    ADMAS   34
20    FORD    89
20    JORDAN   99

6 rows selected.


SQL> SELECT
  2   T .DEPTNO,
  3   listagg (T .ENAME ||'&&'||t.salary,',') WITHIN GROUP (ORDER BY T .ENAME) names
  4  FROM
  5  a200 t
  6  group by deptno;

DEPTNO
----------
NAMES
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10
JONES&&200,SCOTT&&50,SMITH&&100

20
ADMAS&&34,FORD&&89,JORDAN&&99


SQL> SELECT
  2   T .DEPTNO,
  3   listagg (T .ENAME ||'&&'||t.salary,',') WITHIN GROUP (ORDER BY T .salary) names
  4  FROM
  5  a200 t
  6  group by deptno;

DEPTNO
----------
NAMES
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10
SMITH&&100,JONES&&200,SCOTT&&50

20
ADMAS&&34,FORD&&89,JORDAN&&99



原文地址:https://www.cnblogs.com/hzcya1995/p/13348694.html