从表1中选择所有列,从表2中选择一列,按列分组?

时间:2014-04-24 19:37:59

标签: sql oracle

我有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列进行分组,该怎么办?

1 个答案:

答案 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添加其他列变得更加困难,但您可以按照您喜欢的任何内容进行汇总。