1. 程式人生 > >oracle wmsys.wm_concat函式的用法

oracle wmsys.wm_concat函式的用法

今天才發現了wmsys.wm_concat這個有趣有用的函式,它的作用是以’,’連結字元。

例子如下:

SQL> create table idtable (id number,name varchar2(30));

Table created

SQL> insert into idtable values(10,’ab’);

1 row inserted

SQL> insert into idtable values(10,’bc’);

1 row inserted

SQL> insert into idtable values(10,’cd’);

1 row inserted

SQL> insert into idtable values(20,’hi’);

1 row inserted

SQL> insert into idtable values(20,’ij’);

1 row insertedSQL> insert into idtable values(20,’mn’);

1 row inserted

SQL> select * from idtable;

        ID NAME———- ——————————        10 ab        10 bc        10 cd        20 hi        20 ij        20 mn

6 rows selectedSQL> select id,wmsys.wm_concat(name) name from idtable  2  group by id;

        ID NAME———- ——————————————————————————–        10 ab,bc,cd        20 hi,ij,mn

SQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable;

        ID NAME———- ——————————————————————————–        10 ab,bc,cd        10 ab,bc,cd        10 ab,bc,cd        20 ab,bc,cd,hi,ij,mn        20 ab,bc,cd,hi,ij,mn        20 ab,bc,cd,hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;

        ID NAME———- ——————————————————————————–        10 ab        10 ab,bc        10 ab,bc,cd        20 ab,bc,cd,hi        20 ab,bc,cd,hi,ij        20 ab,bc,cd,hi,ij,mn

6 rows selected

個人覺得這個用法比較有趣.

SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable;

        ID NAME———- ——————————————————————————–        10 ab,bc,cd        10 ab,bc,cd        10 ab,bc,cd        20 hi,ij,mn        20 hi,ij,mn        20 hi,ij,mn

6 rows selected

SQL> select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable;

        ID NAME———- ——————————————————————————–        10 ab        10 bc        10 cd        20 hi        20 ij        20 mn

6 rows selected