Получение общей стоимости в xquery (умножение и сложение) - PullRequest
0 голосов
/ 03 ноября 2018

Пытается получить общую сумму, заказанную в XQuery, но сталкивается с некоторыми проблемами.

Это OrderLine.xml

<OrderLine>
  <OrderNum>21610</OrderNum>
  <PartNum>DR93</PartNum>
  <NumOrdered>1</NumOrdered>
  <QuotedPrice>495.00</QuotedPrice>
</OrderLine>
<OrderLine>
  <OrderNum>21610</OrderNum>
  <PartNum>DW11</PartNum>
  <NumOrdered>1</NumOrdered>
  <QuotedPrice>399.99</QuotedPrice>
</OrderLine>

Мне нужно получить общую сумму за заказ. Это мой xquery:

for $ln1 in doc("../premiere/OrderLine.xml")//OrderLine[OrderNum = $ord/OrderNum]
let $total := ($ln1/NumOrdered * $ln1/QuotedPrice)
where $ord/CustomerNum = $cus/CustomerNum

return
<orderRevenue TotalAmount= "{$total}" />

, который работает нормально, когда в системе только один заказ, но когда есть несколько заказов, я получаю две суммы.

Я получаю это:

<orderRevenue TotalAmount="495"/>
<orderRevenue TotalAmount="399.99"/>

когда я должен получить это:

<orderRevenue TotalAmount="$894.99"/>

Любая помощь?

1 Ответ

0 голосов
/ 03 ноября 2018

Я бы просто использовал шаг с /(NumOrdered * QuotedPrice) или оператор карты ! с напр. !(NumOrdered * QuotedPrice) и затем вызовите функцию sum для результата:

declare variable $order-num as xs:integer external := 21610;

<orderRevenue TotalAmount="${sum(//OrderLine[OrderNum = $order-num]!(NumOrdered * QuotedPrice))}"/>

https://xqueryfiddle.liberty -development.net / b4GWV9 для примера ! и https://xqueryfiddle.liberty -development.net / b4GWV9 / 1 для примера шага.

Или используйте sum в результате выражения for:

let $total := 
  sum(
    for $ol in //OrderLine[OrderNum = $order-num]
    return $ol/NumOrdered * $ol/QuotedPrice
  )
return
  <orderRevenue TotalAmount="${$total}"/>

https://xqueryfiddle.liberty -development.net / b4GWV9 / 2

...