2013-03-15 1 views
2

:어떻게 SQL 쿼리를 통해 둥지 XML을에 나는이처럼 보이는 XML을 생성하기 위해 노력하고있어

나는이 (SQL 서버 2005)처럼 보이는 SQL 데이터베이스에 필요한 모든 정보가
<caption nr="1000"> 
    <lang code="EN">Brussels</lang> 
    <lang code="FR">Bruxelles</lang> 
</caption> 
<caption nr="2000"> 
    <lang code="EN">Antwerp</lang> 
    <lang code="FR">Anvers</lang> 
</caption> 

:

fld_pcd_cod    fld_pcd_gem    fld_pcd_tal 
------------------------------------------------------------- 
1000      Brussels     EN 
1000      Bruxelles    FR 
2000      Antwerp     EN 
2000      Anvers     FR 

많은 SQL 쿼리를 그룹, 문, 하위 쿼리, distintc로 시도했습니다 ... 나는 그저 내 머리를 감쌀 수 없습니다.

이것은 내가 얻을 수있는 최선의 해결책입니다. 그러나 새로운 XSD를 만들어야하기 때문에 원하는 것이 아닙니다.

<lang cap="1000" code="FR">BRUXELLES</lang> 
<lang cap="1000" code="EN">BRUSSELS</lang> 
<lang cap="2000" code="FR">ANVERS</lang> 
<lang cap="2000" code="EN">ANTWERP</lang> 

SELECT fld_pcd_cod as 'lang/@cap', fld_pcd_tal as 'lang/@code', fld_pcd_gem as 'lang' 
FROM tbl_pcd 
for XML path(''), type 

가 수행 내가 XML 노드 위 달성하기 위해 사용하는 쿼리입니다 당신이 사람이이 문제를 해결하는 방법에 대한 제안이있다?

답변

1

그룹이있는 caption 노드를 fld_pcd_cod에 가져오고 상관 하위 쿼리에서 lang을 얻습니다.

select T1.fld_pcd_cod as "@nr", 
     (
     select T2.fld_pcd_tal as "@code", 
       T2.fld_pcd_gem as "*" 
     from tbl_pcd as T2 
     where T1.fld_pcd_cod = T2.fld_pcd_cod 
     for xml path('lang'), type 
     ) 
from tbl_pcd as T1 
group by T1.fld_pcd_cod 
for xml path('caption') 
관련 문제