gpt4 book ai didi

SQL 服务器 : FOR XML sorting control by attribute

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:30 25 4
gpt4 key购买 nike

我正在从 SQL Server 查询生成 XML 文件。

我有一些关于排序元素的问题。

例如有如下简单代码

<test>
<tree abc="123"/>
<tree abc="789"/>
<tree-order abc="456"/>
</test>

如您所见,树和树顺序是不同的元素,我想按属性排序

<test>
<tree abc="123"/>
<tree-order abc="456"/>
<tree abc="789"/>
</test>

像这样。

谁有解决这个问题的好主意?

谢谢。

对不起,我有如下详细问题

 <Main>

<test>
<tree abc="123"/>
<tree abc="789"/>
<tree-order abc="456"/>
</test>

<test>
<tree abc="123"/>
<tree abc="789"/>
<tree-order abc="456"/>
</test>

</Main>

成为:

<Main>

<test>
<tree abc="123"/>
<tree abc="456"/>
<tree-order abc="789/>
</test>

<test>
<tree abc="123"/>
<tree abc="456"/>
<tree-order abc="789/>
</test>

</Main>

谢谢。

最佳答案

如果你想重新排序现有的 xml,你可以使用 XQuery :

declare @data xml = '
<test>
<tree abc="123"/>
<tree abc="789"/>
<tree-order abc="456"/>
</test>
'

select @data.query('<test>{for $i in test/* order by $i/@abc return $i}</test>')

结果:

<test>
<tree abc="123" />
<tree-order abc="456" />
<tree abc="789" />
</test>

sql fiddle demo

更新:

要重新排序多个节点,您可以像这样使用 XQuery:

select @data.query('
element Main {
for $j in Main/test
return element test {
for $i in $j/* order by $i/@abc return $i
}
}
')

sql fiddle demo

更新 2

要按属性的整数值排序,请使用 cast as <type> :

select @data.query('
element Main {
for $j in Main/test
return element test {
for $i in $j/* order by $i/@abc cast as xs:integer?
return $i
}
}
')

sql fiddle demo

关于SQL 服务器 : FOR XML sorting control by attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com