У меня есть таблица, которая выглядит следующим образом, поместите код соответствующим образом (в частности, структуры XML и запросы)
Class Subclass Information Details
Classx subclassx Info1 otherinfo1
Classx subclassx Info2
Classx subclassy info3
Classyy subclassyyy info3
В качестве примера мне нужно вернуть строки, отфильтрованные с помощью Class = '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>
То, что вложено в «Подкласс» внутри элемента «Класс» и «Информация» внутри элемента «Подкласс».
Некоторыеколичество попыток:
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>
Интересно, что мне не хватает!