如何在以下结构上编写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,但我无法弄清楚它的语法..
答案 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