时间:2021-07-01 10:21:17 帮助过:2人阅读
Oracle一列的多行数据拼成一行显示字符
oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数。 www.2cto.com 先介绍:WMSYS.WM_CONCAT 例: id name 1 aa 2 bb 3 cc 要的结果是"aa,bb,cc" select WMSYS.WM_CONCAT(a.name) from user a 这样的话,查询出的结果:"aa,bb,cc" www.2cto.com 分隔符如果不需要用英文的逗号,需要改成别的符号比如分号的,可以用下面的方法替换下: select replace(WMSYS.WM_CONCAT(a.name),‘,‘,‘;‘) from user a 结果:"aa;bb;cc" ====================================================================== ListAgg函数 listagg函数的语法结构如下: LISTAGG( [,]) WITHIN GROUP (ORDER BY ) [OVER (PARTITION BY )] listagg虽然是聚合函数,但可以提供分析功能(比如可选的OVER()子句)。使用listagg中,下列中的元素是必须的: www.2cto.com •需要聚合的列或者表达式 •WITH GROUP 关键词 •分组中的ORDER BY子句 例子: DEPTNO ENAME --------- ---------- 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 按照DEPTNO字段分组,对结果集进行字符串聚合,结果如下: DEPTNO AGGREGATED_ENAMES --------- ------------------------- 10 CLARK,KING,MILLER 20 ADAMS,FORD,JONES SQL: SELECT deptno,LISTAGG(ename, ‘,‘) WITHIN GROUP (ORDER BY ename) AS employees FROM emp GROUP BY deptno;Oracle一列的多行数据拼成一行显示字符
标签: