Мне нужны два элемента, чтобы они отображались как дочерние элементы корня. Они должны быть в алфавитном порядке, поэтому elementA должен быть перед elementZ. ElementZ должен появляться только один раз, тогда как elementA должен появляться много раз. Любая помощь должна быть оценена. Это значительно упрощенная часть гораздо большего запроса, который предотвращает использование «пути», поэтому мне нужно решение с использованием явного.
Большое спасибо
Declare @xml xml
DECLARE @tab table (
root_element nvarchar(10),
elementA nvarchar(10),
elementZ nvarchar(10)
)
insert @tab
(root_element, elementA, elementZ)
select 'one' , 'many', 'one' union all
select 'one' , 'many1', 'one' union all
select 'one' , 'many2', 'one' union all
select 'one' , 'many3', 'one' union all
select 'one' , 'many4', 'one' union all
select 'one' , 'many5', 'one'
SET @xml =(
SELECT DISTINCT
TAG,
Parent,
[root_element!1!value],
[elementA!2!value],
[elementZ!3!value]
FROM
(
SELECT DISTINCT
1 AS TAG,
NULL AS Parent,
root_element AS [root_element!1!value],
NULL AS [elementA!2!value],
NULL AS [elementZ!3!value]
FROM @tab
UNION ALL
SELECT DISTINCT
2,
1,
root_element,
elementA,
NULL
FROM @tab
UNION ALL
SELECT DISTINCT
3,
1,
root_element,
elementA,
elementZ
FROM @tab
)a
ORDER BY
[root_element!1!value],
[elementA!2!value],
[elementZ!3!value]
FOR XML EXPLICIT
)
select @xml
--results in this
'<root_element value="one">
<elementA value="many" />
<elementZ value="one" />
<elementA value="many1" />
<elementZ value="one" />
<elementA value="many2" />
<elementZ value="one" />
<elementA value="many3" />
<elementZ value="one" />
<elementA value="many4" />
<elementZ value="one" />
<elementA value="many5" />
<elementZ value="one" />
</root_element>'
--but i want this.
'<root_element value="one">
<elementA value="many" />
<elementA value="many1" />
<elementA value="many2" />
<elementA value="many3" />
<elementA value="many4" />
<elementA value="many5" />
<elementZ value="one" />
</root_element>'
</code>