oracle中listagg()和wmsys.wm_concat()基本用法

1、LISTAGG() 簡介函數

介紹:其函數在Oracle 11g 版本中推出,對分組後的數據按照必定的排序進行字符串鏈接。排序

其中,「[,]」表示字符串鏈接的分隔符,若是選擇使用[over (partition by )]則會使其變成分析函數;字符串

用法1: SELECT aaa, listagg(bbb,',') within GROUP (ORDER BY aaa) FROM table  GROUP BY aaastring

用法2: SELECT aaa, listagg(bbb,',') within GROUP (ORDER BY aaa) over(partition by aaa) FROM tableit

 

2、wm_concat()簡介io

介紹:其函數在Oracle 10g推出,在10g版本中,返回字符串類型,在11g版本中返回clob類型。table

括號裏面的參數是列,並且能夠是多個列的集合,也就是說在括號裏面能夠自由地用‘||’合併字符串。test

用法1: Select aaa, wmsys.wm_concat(bbb || '(' || ccc || ')' ) from table group by aaaselect

用法2: Select aaa, wmsys.wm_concat(bbb || '(' || ccc || ')' ) over(partition by aaa) from table 數據

3、應用實例:

3.一、建立表 CREATE TABLE TESTAGG

(  

  A VARCHAR2(20),

  B VARCHAR2(20),

  C VARCHAR2(20)

)

3.二、初始化數據

INSERT INTO "TESTAGG" (A, B, C) VALUES ('1', 'B1','C1')

INSERT INTO "TESTAGG" (A, B, C) VALUES ('1', 'B2','C2')

INSERT INTO "TESTAGG" (A, B, C) VALUES ('1', 'B3','C3')

INSERT INTO "TESTAGG" (A, B, C) VALUES ('2', 'B4','C4')

INSERT INTO "TESTAGG" (A, B, C) VALUES ('2', 'B5','C5')

INSERT INTO "TESTAGG" (A, B, C) VALUES ('3', 'B6','C6')

3.三、wm_concat()用法

select a,wm_concat(b|| '(' || c || ')') as bc from testagg group by a order by a

1  <CLOB>--B1(C1),B2(C2),B3(C3)

2  <CLOB>--B4(C4),B5(C5)

3  <CLOB>--B6(C6)

若要轉化成string能夠用to_char()函數。

 

3.四、 LISTAGG()用法

select a,LISTAGG(b,',' ) within group(order by a) as bc from testagg group by a

1 B1,B2,B3

2 B4,B5

3 B6

注意:但當數據量比較大時,通常clob字段超過4000,卻報ORA-01489:字符串鏈接的結果過長。有興趣的小夥伴能夠研究下解決辦法。

相關文章
相關標籤/搜索