一、listagg函数
语法:
SELECT
a.字段1,
listagg (T.字段2, ',') WITHIN GROUP (ORDER BY a.字段2) b
FROM
表A a
WHERE
( a.字段1='xx')
GROUP BY
a.字段1
示例:
使用listagg() WITH GROUP()将多行合并成一行(比较常用)
查询学生表,以体育成绩分组,查询各自的学生姓名
SELECT
a.sports,
listagg (a.name, ',') WITHIN GROUP (ORDER BY a.name) names
FROM
student_table a
WHERE
a.sports>='90'
GROUP BY
a.sports
结果:
注:
LISTAGG 返回的是一个varchar2类型的数据,最大字节长度为4000。通常情况下,LISTAGG是满足需要的。但当字节长度超过4000时,就会报错。在这个时候,我们需要将LISTAGG函数改成XMLAGG函数。XMLAGG返回的类型为CLOB,最大字节长度为32767。
二、XMLAGG函数的例子:
XMLAGG(XMLPARSE(CONTENT 字段 || 字符串 WELLFORMED) ORDER BY 字段).GETCLOBVAL();