Oracle12c 中已废弃函数wmsys.wm_concat,可使用listagg 代替,包括11g,建议使用listagg函数。 listagg函数作用,举例如下:
listagg 函数主要目的是为了列转行, 准备测试环境
SQL> select *from listagg_test;
NAME PHONE ADDRESS
------------------------------ ---------- ------------------------------
abc 1111 jinan
abc 2222 beijing
abc 3333 shanghai
firsouler 91111 jinan
firsouler 9222 beijing
firsouler 9333 shanghai
将每个人员用一行显示出来
SQL> col phone for a30
SQL> select name,listagg(phone,',') phone from listagg_test where name='abc' group by name;
NAME PHONE
-------------------- ------------------------------
abc 1111,2222,3333
稍微复杂点,我们需要把地点也列出来,例如 济南 电话,北京电话 ,上海 电话
SQL> col name for a20
col jinan for a20
col beijing for a20
col shanghai for a20
select name,listagg(jinan) jinan,listagg(beijing) beijing,listagg(shanghai) shanghai from
(select name,
case when address='jinan' then phone end as jinan,
case when address='beijing' then phone end as beijing,
case when address='shanghai' then phone end as shanghai from listagg_test order by name) group by name;SQL> SQL> SQL> SQL> 2 3 4 5
NAME JINAN BEIJING SHANGHAI
-------------------- -------------------- -------------------- --------------------
abc 1111 2222 3333
firsouler 91111 9222 9333
关于如何使用废弃函数wmsys.wm_concat ,本博转载了其他文章,可以查看说明。