Oracle PL/SQL 讓多筆資料合併成一筆資料

有時候想要將具有相同性質或意義的多筆資料組合成一筆資料,之前我都是用程式的方式解決

例如:

SQL> select a,b from tmp_ddd;

A          B
---------- ----------
bb         CITY
bb         BASE
aa         JOKEN
aa         MAY

一共有四筆資料,如今想要資料合併為CITY--BASE--JOKEN--MAY,其PL/SQL程式如下:

----------Code Start-------------------
Declare
    vTmp varchar2(1000);
    Cursor c1 is
        select a,b from tmp_ddd ;  
    r1 c1%rowtype ;
    I  number := 0;
Begin
   for r1 in c1 loop
       I := I + 1;
       if I=1 then
           vTmp :=  r1.b ;
       else
           vTmp := vTmp || '--' || r1.b;
       end if;
   end loop ;
   dbms_output.put_line(vTmp);
End;
----------Code End-------------------

但是Oracle有另一種方法可以解決這類的問題,其語法:
SELECT LISTAGG(<COLUMN_NAME>, <LINK_WORD>) WITHIN GROUP (ORDER BY <COLUMN_NAME>) from <TABLE_NAME>  ;

SQL> select listagg(b,'--') within group(order by b) as List_b from tmp_ddd;

LIST_B
-------------------------------------
BASE--CITY--JOKEN--MAY


SQL> select a, listagg(b,'--') within group(order by b)  List_b from tmp_ddd group by a ;

A          LIST_B
---------- --------------------
aa         JOKEN--MAY
bb         BASE--CITY