oracle根据a列中相同的值,获取将对应的B列中各个值合并的结果集

从A查询结果得到B查询结果:

A

--源表 table_t

  a                b
 
广东         广州
 
广东         深圳
 
广西         南宁
 
广西         北海
 
B
--结果表
 
  a                     b
 
广东          广州,深圳
 
广西          南宁,北海
 
使用SQL
select a,WMSYS.WMCONCAT(b) b
    from table_t
    group by a;

合并后的结果B列的数据类型是clob,可以使用to_char()转换。

SQL如下

select a,to_char(WMSYS.WM_CONCAT(b)) b
 
from table_t 
 
group by a

 还有一种方法:

SQL> SELECT LISTAGG(B,',') WITHIN GROUP(ORDER BY B DESC) B,A FROM TABLE_T GROUP BY A;

B                                                                                A
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
深圳,广州                                                                        广东
南宁,北海                                                                        广西

使用LISTAGG函数,其语法是

  LISTAGG(expr,['delimiter']) WITHIN GROUP(ORDER_BY_CLAUSE)

原文地址:https://www.cnblogs.com/MasterE/p/6904005.html