Oracle数据库查询结果拼接(wm_concat、listagg的使⽤)查询结果本来是这样:
结果需要转换成:
参考csdn论坛,了解到可以使⽤以下两种函数:
wm_concat 和 listagg 函数
上半年英文
1.
2. wm_concat,listagg函数都可。。。⼀个10g,⼀个11g
3. sys_connect_by_path,9i也可以⽤这个
我是Oracle11g,测试发现两个函数都可以适⽤,再次参考了解如何使⽤两个函数
如果使⽤listagg函数:
⾸先根据OWNER进⾏分组,然后在每个分组内 根据owner排序后的TABLE_NAME⽤‘,’进⾏拼接
i love you 陶喆SQL> L
1lect listagg(table_name,',')within group(order by owner)所含表,owner from dba_tables where table_name in( 2'DEPT','EMP','BONUS','IDL_SB4$','ERROR$','SETTINGS$'
3)
lico4*group by ownersada
SQL>/
所含表 OWNER
--------------------------------- ------------------------------
BONUS,DEPT,EMP SCOTT
EMP,ERROR$,IDL_SB4$,SETTINGS$ SYS
⽽vm_concat函数:
这⾥不需要写拼接字段,⾃动填充为‘,’regional
SQL>lect wmsys.wm_concat(table_name)所含表,owner from dba_tables where table_name in(
2'DEPT','EMP','BONUS','IDL_SB4$','ERROR$','SETTINGS$'
3)
原来如此英语4group by owner
5/
我爱春天
rightnow所含表 OWNER
--------------------------------- ------------------------------
BONUS,DEPT,EMP SCOTT
SETTINGS$,EMP,IDL_SB4$,ERROR$ SYS
acorn
如果⽤加上 over(partition by owner) 结果如下:
当然实际项⽬中⽤到的有点不⼀样,需要根据表格名前3位数进⾏分组
六级写作
查询结果如下: