0
ルートの子として表示するには、2つの要素が必要です。それらはアルファベット順でなければならないので、elementAはelementZの前になければなりません。 ElementZは1回だけ表示されますが、elementAは何度も表示される必要があります。どんな助けもありがとうございます。これは、 'path'が使用されないようにするもっと大きなクエリの中で非常に単純化されているので、私は明示的に解を使う必要があります。XMLの場合明示的なSQL複製要素
どうもありがとうあなたがElementAを再度選択していない3タグを作成
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>