子结构上的XPath Sum

时间:2011-02-28 07:42:38

标签: xml xpath xquery

如何在以下结构上编写XPath总和?

<Order>
     <Details>
        <Detail>
            <Quantity>10</Quantity>
            <ItemPrice>20</Quantity>
        </Detail>
        <Detail>
            <Quantity>10</Quantity>
            <ItemPrice>20</Quantity>
        </Detail>
     </Details>
 </Order>

我想得到(数量* itemprice)

的总和

我可以这样做:

select *
from mytable
where documentdata.exist('/Order[sum(/Details/Detail/Quantity) > 20]) = 1

但我想使用Quantity * ItemPrice,但我无法弄清楚它的语法..

3 个答案:

答案 0 :(得分:4)

尝试

select *
from mytable
where documentdata.exist('/Order[sum(for $d in Details/Detail return $d/Quantity * $d/ItemPrice) > 20]) = 1

这是正确的XQuery语法,因此它可以与MS SQL Server一起使用,因为它具有一些有限的XQuery支持。

答案 1 :(得分:1)

我想你想要这个XPath 2.0表达式:

/Order[sum(Details/Detail/(Quantity * ItemPrice)) gt 20]

答案 2 :(得分:1)

使用

/*/*/sum(Detail/(Quantity * ItemPrice))

当针对提供的XML文档评估此XPath 2.0(以及XQuery)表达式时,会生成所需的正确结果:

400

因此,完整的SQL查询可能如下所示:

select * from mytable
  where documentdata.exist
    ('/*[sum(*/Detail/(Quantity * ItemPrice)) > 20]' ) = 1