查询结果本来是这样:
在这里插入图片描述

结果需要转换成:
在这里插入图片描述
参考csdn论坛《ORACLE SQL查询结果集怎么拼接?? 》,了解到可以使用以下两种函数:
wm_concatlistagg 函数

1.看看函数wmsys.wm_concat,应该是oracle的10g以及以上才行。另外注意一点,那就是怎么分组
2. wm_concat,listagg函数都可。。。一个10g,一个11g
3. sys_connect_by_path,9i也可以用这个

我是Oracle11g,测试发现两个函数都可以适用,再次参考《oracle中listagg()和wmsys.wm_concat()基本用法》了解如何使用两个函数
在这里插入图片描述

如果使用listagg函数:

首先根据OWNER进行分组,然后在每个分组内 根据owner排序后的TABLE_NAME用‘,’进行拼接

SQL> L
  1   select 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      ) 	
  4*     group by owner
SQL> /

所含表                            OWNER
--------------------------------- ------------------------------
BONUS,DEPT,EMP                    SCOTT
EMP,ERROR$,IDL_SB4$,SETTINGS$     SYS

而vm_concat函数:

这里不需要写拼接字段,自动填充为‘,’

SQL>    select  wmsys.wm_concat(table_name) 所含表 ,owner  from dba_tables where table_name in (
  2          'DEPT','EMP','BONUS','IDL_SB4$','ERROR$','SETTINGS$'
  3          )
  4     group by owner
  5  /

所含表                            OWNER
--------------------------------- ------------------------------
BONUS,DEPT,EMP                    SCOTT
SETTINGS$,EMP,IDL_SB4$,ERROR$     SYS

如果用加上 over(partition by owner) 结果如下:
在这里插入图片描述

当然实际项目中用到的有点不一样,需要根据表格名前3位数进行分组
在这里插入图片描述
查询结果如下:
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐