sql - 删除重复的 XML 节点 SQL 查询
问题描述
我有以下 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>
我想删除重复的节点并以以下格式返回 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
,但它返回值(不包含节点属性)。
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');
推荐阅读
- jquery - 如何将当前页码和长度发送到服务器
- c++ - 如何在鼠标左键按下时触发循环 autoclicker c++
- mongodb - 如何在 mongodb 上计算/求和数组?
- typescript - 以类型安全的方式使可选参数的数量相同
- angular - Oauth1.0a Angular 2+
- android - 如何修复 HttpException:在收到完整标头之前连接已关闭,uri = http://127.0.0.1:56981/gshxmXx3bLA=/
- excel - Excel - 条形图 w 系列重叠
- javascript - 如何在 React 中将登录按钮更改为注销按钮
- c# - .net core 3.1 web api 无法删除转义字符\n
- javascript - 你如何旋转 Popper.js 弹出窗口?