Мне нужно, чтобы два элемента отображались как дети из корня. Они должны быть в алфавитном порядке, поэтому elementA должен быть до элементаZ. ElementZ должен появляться только один раз, тогда как elementA должен появляться много раз. Любая помощь должна быть оценена. Это значительно упрощенная часть гораздо большего запроса, который предотвращает использование «пути», поэтому мне нужно решение, использующее явное.Для XML Явных дублирующих элементов SQL
Большое спасибо
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>