2017-10-11 61 views
0

我的任務是將SQL數據導出到XML。我必須將所有在每個文件上工作的人員與他們的電子郵件地址一起,將他們聯合在一起,併爲他們分配一個ID。我只是使用行號來設置他們的ID - 它們是否改變並不重要,只要我們上傳這個XML文件就必須保持一致。將SQL結果轉換爲「規範化」XML

對於那些addressid s,我們必須用每個ID替換每個文件中的責任方。

最終的結果會是這個樣子:

<Addresses> 
    <Address Name="SomeName" Email= "SomeEmail" Addressid="SomeID"/> 
</Addresses> 
<Files> 
    <File party1id="2" Party2ID="3" Party3ID="6" /> 
</Files> 

我有地址表的工作,但我有困難拉出所有ID爲每一方。多次參加該表並不是一個可行的解決方案。

有沒有人有更好的方法來解決這個問題?

+0

請提供您的表的樣本數據也-HTH)。 –

回答

0

我想你可以使用這樣的查詢:

;with t as (
    select *, 
     row_number() over (partition by Addressid order by partyId) rn 
    from party 
) 
select (
    select 
     [Name] 'Address/@Name', 
     Email 'Address/@Email', 
     Addressid 'Address/@Addressid' 
    from Addresses 
    for xml path('Addresses')) + 
    '<Files><File ' + replace((
    select 'Party'+cast(rn as varchar(5))+'ID='''+cast(partyId as varchar(5))+''' ' 
    from t 
    where Addresses.Addressid = t.Addressid 
    for xml path('') 
    ),'''', '"') + '/></Files>' 
from Addresses; 

SQL Fiddle Demo

select 
    [Name] 'Addresses/Addresse/@Name', 
    Email 'Addresses/Addresse/@Email', 
    Addressid 'Addresses/Addresse/@Addressid', 
    party1id 'Files/File/@party1id', 
    Party2ID 'Files/File/@Party2ID', 
    Party3ID 'Files/File/@Party3ID' 
from 
    t 
for xml path(''); 

SQL Fiddle Demo