方法一:wmsys.wm_concat()
方法二:listagg()(注意版本的问题,低版本的oracle是不支持的,貌似11.2g以后的版本支持)
集体的用法如下:
如有表students
stu_class | stu_name |
1 | 小明 |
3 | 小强 |
2 | 小花 |
1 | 李四 |
想要的到的效果是:
1 | 小明,李四 |
2 | 小花 |
3 | 小强 |
用方法一的写法为:
select s.stu_class,to_char(vmsys.wm_concat(stu_name)) from students s group by s.stu_class;
结果为:
1 | 小明,李四 |
2 | 小花 |
3 | 小强 |
方法二的写法为(注意语法的结构):
写法一:
select s.stu_class ,listagg(s.stu_name,',') within group (order by s.stu_name desc) from students s group by s.stu_class;
写法二(不带group):
select s.stu_class ,listagg(s.stu_name,',') within group (order by s.stu_name desc) over (partition by s.stu_class) from students s;
结果同为:
1 | 小明,李四 |
2 | 小花 |
3 | 小强 |