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

例如:

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
arrow
arrow
    全站熱搜

    keven 發表在 痞客邦 留言(0) 人氣()