有時候想要將具有相同性質或意義的多筆資料組合成一筆資料,之前我都是用程式的方式解決
例如:
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