2013-03-15 69 views
2

我试图生成XML看起来像这样:如何通过sql查询窝XML

<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> 

我看起来像这样(SQL Server 2005中),在SQL数据库中的所有必要信息:

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

我试着用语句,子查询,distintc等组来查询很多sql查询......我只是无法将我的头围绕在它周围。

这是我能得到的最好的可行解决方案。但这不是我想要的,因为我不得不制作一个新的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> 

这是我用它来实现上面的XML节点查询

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 

你的人对如何解决这个建议吗?

回答

1

通过fld_pcd_cod获得具有caption节点的caption节点,并在相关子查询中获得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')