1.需求:
原始數據如下(建表sql在文章底部):
目標:根據type進行分組,把樓棟名去重後用"/"進行拼接
2.解決:
方案1:使用wm_concat
select TYPE , wm_concat(NAME) NAME from T_BUILDING group by TYPE;
wm_concat 默認使用的是逗號進行拼接,結果如下(此時NAME的結果類型爲:BLOB):
再配合使用子查詢和replace函數達到目的,sql如下:
select t1.TYPE , replace(wm_concat(t1.NAME),',','/') NAME from (select distinct TYPE,NAME from T_BUILDING) t1 group by t1.TYPE;
結果如下:
方案2:使用listagg
select t1.TYPE , listagg(t1.NAME,'/') WITHIN GROUP( ORDER BY t1.NAME) NAME from (select distinct TYPE,NAME from T_BUILDING) t1 group by t1.TYPE;
結果如下(此時NAME的結果類型爲:VARCHAR):
附:表數據sql腳本如下:
create table T_BUILDING
(
ID NUMBER not null
constraint T_BUILDING_PK
primary key,
NAME VARCHAR2(200),
TYPE NUMBER
)
/
comment on column T_BUILDING.NAME is '樓棟名'
/
comment on column T_BUILDING.TYPE is '類型'
/
INSERT INTO SCOTT.T_BUILDING (ID, NAME, TYPE) VALUES (1, '樓棟1', 1);
INSERT INTO SCOTT.T_BUILDING (ID, NAME, TYPE) VALUES (2, '樓棟2', 1);
INSERT INTO SCOTT.T_BUILDING (ID, NAME, TYPE) VALUES (3, '樓棟1', 1);
INSERT INTO SCOTT.T_BUILDING (ID, NAME, TYPE) VALUES (4, '樓棟11', 2);
INSERT INTO SCOTT.T_BUILDING (ID, NAME, TYPE) VALUES (5, '樓棟22', 2);