sql語句:db2根據某欄位合併多行資料,將相同組中多行例合併到一個欄位
阿新 • • 發佈:2021-01-09
原資料
合併後資料
按name欄位分組,合併house,aaa欄位*
合併資料後的缺點就是有重複的的,這個是本人接受不了的,限於技術有限,只能湊合的用了,業務要求多,技術不過關哎。。。
建表
CREATE TABLE ttable
( id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ,
name varchar(100),
house varchar(100),
aaa varchar(100),
PRIMARY KEY (id)
);
INSERT INTO ttABLE(name,house,aaa)
values('張三','美麗','啊'),
('張三','美麗','艾克'),
('張三','天使1','啊'),
('李四','藍天3','看看'),
('張三','定時','第三方'),
('李四','是否','看看'),
('李四','白雲1','中');
方法一:
SELECT
MAX(ID),name,
REPLACE(REPLACE(xml2clob(xmlagg(xmlelement(name A, house || ','))), '<A>', ''), '</A>', '') house,
REPLACE (REPLACE(xml2clob(xmlagg(xmlelement(name A, aaa || ','))), '<A>', ''), '</A>', '') aaa
FROM ttABLE
GROUP BY name
方法二:
--給資料加上序號
with wa_RowNum(id,name,house,aaa,rn) as(
select id,name,house,aaa,ROW_NUMBER() OVER(PARTITION BY name) from TTABLE
),
--CTE遞迴拼接house,序號最大的行拼接了所有的house資料
wa_addHouse( id,name,house,aaa,rn) as(
select wr.id,wr.name,CAST(wr.house AS CLOB),CAST(wr.aaa AS CLOB),wr.rn from wa_RowNum wr where wr.rn=1
UNION ALL
select wrn.id,wrn.name,CAST(wah.house||';'||wrn.house AS CLOB),CAST(wah.aaa||';'||wrn.aaa AS CLOB),wah.rn+1
from wa_addHouse wah,wa_RowNum wrn where wrn.name=wah.name and wah.rn+1=wrn.rn
),
--過濾掉不需要的資料
wa_getMax(id,name,house,aaa) as(
select id,name,house,aaa from wa_addHouse wa
where wa.rn in(
select max(iwa.rn) from wa_addHouse iwa where iwa.name=wa.name)
)
select * from wa_getMax