1
我有一个看起来像这样的表,把代码适当地(特别是XML结构和查询)返回嵌套XML重复列
Class Subclass Information Details
Classx subclassx Info1 otherinfo1
Classx subclassx Info2
Classx subclassy info3
Classyy subclassyyy info3
作为一个例子,我需要返回与类过滤行='classx ”,返回:
<Class Name="Classx">
<Subclass subclassName ="subclassx">
<Info>Info1</Info>
<Info>Info2</Info>
</Subclass>
<Subclass subclassName ="subclassy">
<Info>Info3</Info>
</Subclass>
</Class>
(或)
<Class Name="Classx">
<Subclass>subclassx
<Info>Info1</Info>
<Info>Info2</Info>
</Subclass>
<Subclass>subclassy
<Info>Info3</Info>
</Subclass>
</Class>
东西巢 '子类' 内部 '类' 元件, d'Info'在'Subclass'元素中。
某些查询尝试:
DECLARE @classFilter nvarchar(15);
SELECT @classFilter = 'Classx'
SELECT @classFilter as '@Class',
(SELECT r1.subClass as 'SubClass',
(SELECT DISTINCT r1.Info as 'Info'
FROM @results as r2
WHERE r2.Class= @classFilter and r1.Subclass = r2.Subclass
FOR XML PATH('Information'), TYPE
)
FROM @results r1
GROUP BY r1.Class, r1.SubClass, r1.Info
HAVING r1.Class= @classFilter
FOR XML PATH('Subclasses'), TYPE)
FOR XML PATH('Class'), TYPE;
给出:
<Class Class="Classx">
<Subclasses>
<SubClass>subclassx</SubClass>
<Information>
<Info>Info1</Info>
</Information>
</Subclasses>
<Subclasses>
<SubClass>subclassx</SubClass>
<Information>
<Info>Info2</Info>
</Details>
</Subclasses>
<Subclasses>
<SubClass>subclassy</SubClass>
<Information>
<Info>Info3</Info>
</Information>
</Subclasses>
</Class>
我能来最接近的是
SELECT @classfilter as '@Name', --or r1.Class
(SELECT r1.Subclass as '@Subclass',
(SELECT DISTINCT r1.Information as 'Information'
FROM @results as r2
WHERE r2.Class = @classFilter and r1.Subclass = r2.Subclass
)
FROM @results r1
GROUP BY r1.Class, r1.Subclass, r1.Information
HAVING r1.Class= @classFilter
FOR XML PATH('Subclasses'), TYPE)
FOR XML PATH('Class'), TYPE;
给出:
<Class Name="classx">
<Subclasses subclass="subclassx">Info1</Subclasses>
<Subclasses subclass="subclassx">Info2</Subclasses>
<Subclasses subclass="subclassy">Info3</Subclasses>
</Class>
想知道我错过了什么!