【函数】Oracle12c 列转行函数使用listagg

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 ,本博转载了其他文章,可以查看说明。

请使用浏览器的分享功能分享到微信等