2014-04-24 4 views
1

나는 그래서 기본적으로 출력이 같은 것 내가 표 1의 모든 열과 표 2의 한 열을 그룹화하여 선택 하시겠습니까?

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; 

같은 것을하고 싶어 2

id2 name2 mother_name 
1 abc iii 
2 abc jjj 

id1 name1 address1 
1 abc add1 
2 abc add2 

와 테이블을 표했다

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

관련 문제