我有table1
id1 name1 address1
1 abc add1
2 abc add2
和表2
id2 name2 mother_name
1 abc iii
2 abc jjj
我想做点什么
select table1.id1,table1.name1,XMLAGG(XMLELEMENT(E,table1.address1||',')).EXTRACT('//text()), table2.name,
XMLAGG(XMLELEMENT(E,table2.mother_name||',')).EXTRACT('//text())
from table1 inner join table2 on table1.name1=table2.name2
group by table2.name2;
所以基本上输出就像
id1 name1 addr1 name2 xmlagg
1 abc add1,add2 abc iii,jjj
此外,
如果我想为其中一个t1列进行分组,该怎么办?
答案 0 :(得分:1)
我会在子查询中使用listagg()
:
select t1.*, xmlagg
from table1 t1 join
(select name2, listagg(mother_name, ',') within group (order by mother_name) as xmlagg
from table2 t2
group by name2
) t2
on t1.name1 = t2.name2;
编辑:
上述查询在加入之前进行聚合,因此可以使用t1.*
。您也可以在加入后执行此操作:
select t1.name, listagg(mother_name, ',') within group (order by mother_name)
from table1 t1 join
table2 t2
on t1.name1 = t2.name2
group by t1.name;
此表单使得向select
添加其他列变得更加困难,但您可以按照您喜欢的任何内容进行汇总。