簡體   English   中英

oracle中不同的listagg

[英]distinct listagg in oracle

我有這樣的查詢:

select tab1.id,
(
select listagg(tab2.surna||'  '||tab2.name||':'||tab2.addr||'  '||tab2.numb,',  ') within group( order by tab2.name)
from tab2
where tab1.id=tab2.id2id  /*join tab1 with tab2 */
)as address
from tab1

結果是:

name_surname1:addr 1,name_surname1:addr 2,name_surname2:addr 3

但預期的結果是:

name_surname1 :(地址1,addr 2),name_surname2 :(地址3)

為了避免顯示名稱重復記錄,我該如何實現?

謝謝

我認為您需要2個級別的listagg 由於您未提供任何腳本來復制您的數據結構,因此我提供了自己的通用示例...

with tab as (
select 's' s,'n' n, 'addr1' addr from dual
union all
select 's' s,'n' n, 'addr2' addr from dual
union all
select 'd' s,'k' n, 'addr3' addr from dual
union all
select 'd' s,'k' n, 'addr4' addr from dual
)
select listagg(res,',') within group (order by res) final_res from ( 
select s || n || ':(' ||listagg( addr,',  ')  within group (order by s,n)  || ')'res  
from tab  
group by s||n
) 

結果是

dk:(addr3, addr4),sn:(addr1, addr2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM