XML:相同的父级
如何设计一个XML查询来返回同一路径下具有相同父级的所有子级?XML:相同的父级,xml,tsql,Xml,Tsql,如何设计一个XML查询来返回同一路径下具有相同父级的所有子级? e、 g 使用此代码: Select ParentID , ChildID FROM parent_child FOR XML PATH('Parent'), type, root('Provider') 这显示为: <Provider> <Parent> <ParentID>Parent1</ParentID> <ChildID>Child1&
e、 g 使用此代码:
Select
ParentID ,
ChildID
FROM parent_child
FOR XML PATH('Parent'), type, root('Provider')
这显示为:
<Provider>
<Parent>
<ParentID>Parent1</ParentID>
<ChildID>Child1</ChildID>
</Parent>
<Parent>
<ParentID>Parent1</ParentID>
<ChildID>Child2</ChildID>
</Parent>
<Parent>
<ParentID>Parent1</ParentID>
<ChildID>Child3</ChildID>
</Parent>
<Parent>
<ParentID>Parent4</ParentID>
<ChildID>Child4</ChildID>
</Parent>
<Parent>
<ParentID>Parent5</ParentID>
<ChildID>Child5</ChildID>
</Parent>
</Provider>
父母1
孩子1
父母1
孩子2
父母1
孩子3
父母4
孩子4
父母5
孩子5
相反,我希望它显示为:
<Provider>
<Parent>
<ParentID>Parent1</ParentID>
<ChildID>Child1</ChildID>
<ChildID>Child2</ChildID>
<ChildID>Child3</ChildID>
</Parent>
<Parent>
<ParentID>Parent4</ParentID>
<ChildID>Child4</ChildID>
</Parent>
<Parent>
<ParentID>Parent5</ParentID>
<ChildID>Child5</ChildID>
</Parent>
</Provider>
父母1
孩子1
孩子2
孩子3
父母4
孩子4
父母5
孩子5
如何设计此查询?这似乎可行。我已将示例数据切换为表变量,只是为了使脚本自包含且可重复,而不留下任何工件:
declare @parent_child table
(
ParentID varchar(50),
ChildID varchar(50)
)
insert @parent_child
values ('Parent1','Child1'),('Parent1','Child2'),('Parent1','Child3'),
('Parent4','Child4'),('Parent5','Child5')
select * from @parent_child
select
ParentID,
(select ChildID
from @parent_child pc2
where pc2.ParentID = pc1.ParentID for xml path(''),type)
from (select Distinct ParentID from @parent_child) pc1
for xml path('Parent'), type, root('Provider')
结果:
<Provider>
<Parent>
<ParentID>Parent1</ParentID>
<ChildID>Child1</ChildID>
<ChildID>Child2</ChildID>
<ChildID>Child3</ChildID>
</Parent>
<Parent>
<ParentID>Parent4</ParentID>
<ChildID>Child4</ChildID>
</Parent>
<Parent>
<ParentID>Parent5</ParentID>
<ChildID>Child5</ChildID>
</Parent>
</Provider>
父母1
孩子1
孩子2
孩子3
父母4
孩子4
父母5
孩子5
关键部分实际上是在相关子查询中生成子元素
,确保它们没有单独包装(路径(“”)
),并且结果在外部查询中被视为已形成的XML(类型
)
<Provider>
<Parent>
<ParentID>Parent1</ParentID>
<ChildID>Child1</ChildID>
<ChildID>Child2</ChildID>
<ChildID>Child3</ChildID>
</Parent>
<Parent>
<ParentID>Parent4</ParentID>
<ChildID>Child4</ChildID>
</Parent>
<Parent>
<ParentID>Parent5</ParentID>
<ChildID>Child5</ChildID>
</Parent>
</Provider>