LISTAGG函数可以把表某一列的值用指定的符号拼接到一行
LISTAGG(列1, '连接符') WITHIN GROUP(ORDER BY 列2)
原表:aaa
SELECT
*
FROM
aaa;
USER_NAME | SEX |
张龙 | 男 |
赵虎 | 女 |
王朝 | 男 |
马汉 | 女 |
用法一:用指定符号拼接列的所有值
SELECT
LISTAGG(user_name, ',') WITHIN GROUP(
ORDER BY
user_name
) listagg
FROM
aaa t;
执行结果:
LISTAGG |
张龙,王朝,赵虎,马汉 |
用法二:按分组,用指定符号拼接分组内列的值
SELECT
t.*,
LISTAGG(user_name, ',') WITHIN GROUP(
ORDER BY
user_name
) OVER(
PARTITION BY sex
) listagg
FROM
aaa t;
执行结果:
USER_NAME | SEX | LISTAGG |
赵虎 | 女 | 赵虎,马汉 |
马汉 | 女 | 赵虎,马汉 |
张龙 | 男 | 张龙,王朝 |
王朝 | 男 | 张龙,王朝 |
另外:wm_concat函数也可以达到此目的,但是11gr2和12C版本已经弃用了,这里不推荐使用。