2016-08-05 12 views
3

xml形式の一部の列を選択するクエリを作成しています。FOR XMLを使用して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> 

以下のようなXMLを引っ張るしかし、私

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

以下のようにクエリを書い現時点で

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

以下のようなデータを持っていますリンク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; 
、これを試してみてください
関連する問題