2013-06-01 2 views
0

데이터베이스를 쿼리 할 때 다음 XML을 생성하려고합니다. 데이터베이스 두 테이블의 국가를 포함하고 한국 -XML 결과를 생성하는 SQL 쿼리

<Country> 
    <CountryInfo> 
     <name>USA</name> 
     <districts>50</districts> 
     <state> 
      <stateName>New York</stateName> 
      <statePop>8,244,910</statePop> 
     </state> 
     <state> 
      <stateName>Chicago</stateName> 
      <statePop>State Population: 2,707,120</statePop> 
     </state> 
</CountryInfo> 
<CountryInfo> 
     <name>Germany</name> 
     <districts>16</districts> 
     <state> 
      <stateName>Berlin</stateName> 
      <statePop>3,469,910</statePop> 
     </state> 
     <state> 
      <stateName>Brandenburg</stateName> 
      <statePop>2,500,000</statePop> 
     </state> 
    </CountryInfo> 
</Country> 

을 여기에 시도이다 -

select ctry.NAME, ctry.DISTRICTS, st.ST_NAME, st.ST_POPULATION 
from COUNTRY ctry inner join STATES st on (ctry.NAME=st.COUNTRY); 

결과는 플랫 파일입니다.

<CountryCollection> 
    <COUNTRY> 
    <NAME>USA</NAME> 
    <DISTRICTS>50</DISTRICTS> 
    <ST_NAME>New York</ST_NAME> 
    <ST_POPULATION>8,244,910</ST_POPULATION> 
    </COUNTRY> 
    <COUNTRY> 
    <NAME>USA</NAME> 
    <DISTRICTS>50</DISTRICTS> 
    <ST_NAME>CHICAGO</ST_NAME> 
    <ST_POPULATION> 2,707,120</ST_POPULATION> 
    </COUNTRY> 
    <COUNTRY> 
    <NAME>GERMANY</NAME> 
    <DISTRICTS>16</DISTRICTS> 
    <ST_NAME>Berlin</ST_NAME> 
    <ST_POPULATION>3,469,910</ST_POPULATION> 
    </COUNTRY> 
    <COUNTRY> 
    <NAME>GERMANY</NAME> 
    <DISTRICTS>50</DISTRICTS> 
    <ST_NAME>Brandenburg</ST_NAME> 
    <ST_POPULATION>2,500,000</ST_POPULATION> 
    </COUNTRY> 
</CountryCollection> 

어떻게 그룹화하여 원하는 결과를 얻을 수 있습니까?

+0

어떤 RDBMS를 사용하고 있습니까? –

+0

RDBMS는 Oracle – proximityFlying

답변

1

오라클 RDBMS를 사용하고 있으므로 이것을 시도하십시오.

SELECT XMLElement("Country" 
    , XMLAgg(
    XMLElement("CountryInfo" 
     ,XMLFOREST(CTRY.NAME "name", ctry.DISTRICTS "districts") 
     , xmlAgg(
     XMLElement("state",XMLFOREST(st.ST_NAME "stateName", st.ST_POPULATION "statePop") 
     ) 
    ) 
    ) 
) 
) 
FROM COUNTRY ctry 
INNER JOIN STATES st 
ON (ctry.NAME=st.COUNTRY) 
GROUP BY CTRY.NAME ,ctry.DISTRICTS 

@ A.B.Cade.

+0

입니다. "테이블 또는 뷰가 존재하지 않습니다."라고 표시됩니다. XMLAgg는 XMLElement 또는 XMLForest처럼 굵게 표시됩니다. XMLAgg가 존재하지 않을 수도 있습니까? – proximityFlying

+0

데이터베이스 버전이 무엇입니까? 비슷한 구조의 11gR2에서 테스트했습니다. – Ftaveras

+1

@proximityFlying, xmlagg는 테이블이나 뷰가 아니지만 집계 함수입니다. 테이블의 이름이 정확히 같지 않을 수 있습니까? 쿼리가 작동하기 때문에 (group by 절에서만', ctry.DISTRICTS'가 필요합니다) 여기에 sqlfiddle 데모가 있습니다. http://www.sqlfiddle.com/#!4/26cd6/3 –