2014-04-24 133 views
1

我已經表1選擇表1中的所有列和表2中按列分組的一列

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

我會在子查詢中使用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,但你可以通過任何你喜歡的聚集。

+0

它的工作原理...我有老版本的甲骨文..所以XMLagg也可以。 – TommyT

+0

如果我想爲t1列中的一列做一個組,也該怎麼辦? – TommyT

相關問題