删除重复的 XML 个节点 SQL 查询

Remove duplicate XML nodes SQL query

我有以下 XML.

<Root>
  <Child1>
    <SubChild1>some value</PartNumber>
  </Child1>
  <Child2>some data</Child2>
  <Child3>some data</Child3>
  <Child4>some data</Child4>
  <Child2>some data</Child2>
  <Child3>some data</Child3>
  <Child5>some data</Child5>
</Root>

我想删除重复的节点和 return 以下格式的 XML。

<Root>
  <Child1>
    <SubChild1>some value</PartNumber>
  </Child1>
  <Child2>some data</Child2>
  <Child3>some data</Child3>
  <Child4>some data</Child4>
  <Child5>some data</Child5>
</Root>

我尝试了下面的 SQL 查询,但没有成功。

SELECT @myXMLData.query('
    for $x in distinct-values(//*)[1]
        return
            (//*)[1]
')

我也试过 distinct-values 但它 return 是值(没有包含节点属性)。

SELECT @XML.query('<Root>{ distinct-values(//*) }</Root>')

请帮忙解决这个问题?

declare @x xml = N'<Root>
  <Child1>
    <SubChild1>some value</SubChild1>
  </Child1>
  <Child2>some data</Child2>
  <Child3>some data</Child3>
  <Child4>some data</Child4>
  <Child2>some data</Child2>
  <Child3>some data</Child3>
  <Child5>some data</Child5>
</Root>';

select node as '*'
from
(
select x.e.query('.') as node, row_number() over(partition by x.e.value('local-name(.)', 'nvarchar(100)') order by x.e) as nodenum
from @x.nodes('Root/*') as x(e)
) as src
where nodenum = 1
for xml path(''), root('Root');