2016-08-05 92 views
3

我在寫查詢以選擇xml格式的某些列。使用FOR XML以xml格式選擇數據

樣品

我有一個像下面

Create Table #Master(Id int, Name varchar(100)) 

Insert Into #Master 
Values(1,'Item1'),(2,'Item2') 


Create Table #Sub(SubId int,MasteId int, SubName varchar(100)) 

Insert Into #Sub 
Values(1,1,'SubItem1'),(2,1,'SubItem2') 

數據目前編寫查詢如下

Select * 
From #Master as Main 
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL; 

其中拉XML如下

<ItemGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Main> 
    <Id>1</Id> 
    <Name>Item1</Name> 
    </Main> 
    <Main> 
    <Id>2</Id> 
    <Name>Item2</Name> 
    </Main> 
</ItemGroup> 

但我想要使用鏈接t他#MASTER和#Sub把分項單獨的說明每個主項,這樣就會產生類似下面

<ItemGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Main> 
    <Id>1</Id> 
    <Name>Item1</Name> 
    <SubItems> 
     <subitem> 
     <subid>1</subid> 
     <masterid>1</masterid> 
     <subname>SubItem1</subname> 
     </subitem> 
     <subitem> 
     <subid>2</subid> 
     <masterid>1</masterid> 
     <subname>SubItem2</subname> 
     </subitem> 
    </SubItems> 
    </Main> 
    <Main> 
    <Id>2</Id> 
    <Name>Item2</Name> 
    </Main> 
</ItemGroup> 

有什麼辦法,我可以做到這一點?

回答

1
SELECT 
    *, 
    (
     SELECT * 
     FROM #Sub AS subitem 
     WHERE subitem.MasteId = Main.Id 
     FOR XML AUTO, ELEMENTS, TYPE 
    ) AS SubItems 
From #Master as Main 
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL; 
1

試試這個,

Select *, (Select * 
      From #Sub as s 
      WHERE s.MasteId = Main.Id 
      FOR XML PATH('subitem'), TYPE) SubItems 
From #Master as Main 
FOR XML AUTO, ROOT ('ItemGroup'), ELEMENTS XSINIL;