现有emp表,表结构如下:
1.需求描述
现在需要将表emp的字段按照字段顺序依次拼接为一行,最终效果如下:
2.实现方法
2.1 通过listagg函数实现
select a.table_name,listagg(column_name,‘,‘) within group(order by column_id) as res
from user_tab_columns a where table_name=‘EMP‘
group by a.table_name;
2.2 通过wmsys.wm_concat实现
首先,我们使用常规的写法
select a.table_name, wmsys.wm_concat(a.column_name)
from user_tab_columns a where table_name=‘EMP‘
group by a.table_name;
执行结果如下图:
从结果可以清晰的发现,上述结果虽然连接在一起了,但是并没有按照字段顺序排序,那么需要排序的话,就得添加over
了
select table_name, max(res) from (
select a.table_name,
wmsys.wm_concat(a.column_name) over(partition by a.table_name order by a.column_id) as res
from user_tab_columns a where table_name=‘EMP‘)
group by table_name;