2013-03-15 42 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')