如何在XQUERY子序列中使用ORDERBY子句?

如何在XQUERY子序列中使用ORDERBY子句?,xquery,Xquery,我有一个名为TBTASK的表,其结构如下 PRIID CHARACTER(15) NOT NULL, BID CHARACTER(10) NOT NULL, REF CHARACTER(15) NOT NULL, TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP, XMLREC XML NOT NULL 存储在DB XMLREC列中的XML如下所示 <Root><Code>6</Code><Id>

我有一个名为TBTASK的表,其结构如下

PRIID CHARACTER(15) NOT NULL,
BID CHARACTER(10) NOT NULL,
REF CHARACTER(15) NOT NULL,
TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
XMLREC XML NOT NULL
存储在DB XMLREC列中的XML如下所示

<Root><Code>6</Code><Id>4</Id><Number>999</Number></Root>
<Root><Code>6</Code><Id>4</Id><Number>1001</Number></Root>
<Root><Code>6</Code><Id>4</Id><Number>1002</Number></Root>
<Root><Code>6</Code><Id>4</Id><Number>998</Number></Root>
Im使用以下XQUERY查找数据:

XQUERY
let $str:= subsequence((db2-fn:sqlquery( 'SELECT XMLREC FROM LIS.TBTASK WHERE BID=1') 
    /Root[Code='6']),1,5)    
order by $str/Root/Number
return ($str)
但我并没有按照数字列的顺序得到结果(order by应用于数字)

你能帮我一下吗。

这应该可以:

for $str in (db2-fn:sqlquery( 'SELECT XMLREC FROM LIS.TBTASK WHERE BID=1')/Root[Code='6']),1,5)    
order by xs:int($str/Number)
return ($str)
请注意,您需要至少一个for语句才能使order by变得有用。此外,您的路径($str/Root/Number)错误,因为$str已经在根节点上。此外,我假设您希望以数字方式而不是字符串方式对其进行排序,因此我添加了显式类型转换以使其工作