Сумма XPath по подструктуре - PullRequest
3 голосов
/ 28 февраля 2011

Как мне записать сумму 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

Но я хочу использовать количество * ItemPrice, но не могу понять синтаксис для него ..

Ответы [ 3 ]

4 голосов
/ 28 февраля 2011

Попробуйте

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 голос
/ 28 февраля 2011

Используйте :

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

, когда это выражение XPath 2.0 (а также XQuery) оценивается относительно предоставленного XML-документа, требуемый, правильный результат равенпроизведено:

400

Итак, полный запрос SQL может выглядеть так:

select * from mytable
  where documentdata.exist
    ('/*[sum(*/Detail/(Quantity * ItemPrice)) > 20]' ) = 1
1 голос
/ 28 февраля 2011

Я думаю, вам нужно выражение XPath 2.0:

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