Сумма Xquery, чтобы получить общую сумму - PullRequest
0 голосов
/ 04 ноября 2018

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

Это OrderLine.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataroot>
 <OrderLine>
  <OrderNum>21608</OrderNum>
  <PartNum>AT94</PartNum>
  <NumOrdered>11</NumOrdered>
  <QuotedPrice>21.95</QuotedPrice>
 </OrderLine>
 <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>
  <OrderLine>
    <OrderNum>21613</OrderNum>
    <PartNum>KL62</PartNum>
    <NumOrdered>4</NumOrdered>
    <QuotedPrice>329.95</QuotedPrice>
   </OrderLine>
   <OrderLine>
    <OrderNum>21614</OrderNum>
    <PartNum>KT03</PartNum>
    <NumOrdered>2</NumOrdered>
    <QuotedPrice>595.00</QuotedPrice>
   </OrderLine>
   <OrderLine>
    <OrderNum>21617</OrderNum>
    <PartNum>BV06</PartNum>
    <NumOrdered>2</NumOrdered>
    <QuotedPrice>794.95</QuotedPrice>
   </OrderLine>
   <OrderLine>
    <OrderNum>21617</OrderNum>
    <PartNum>CD52</PartNum>
    <NumOrdered>4</NumOrdered>
    <QuotedPrice>150.00</QuotedPrice>
   </OrderLine>
   <OrderLine>
    <OrderNum>21619</OrderNum>
    <PartNum>DR93</PartNum>
    <NumOrdered>1</NumOrdered>
    <QuotedPrice>495.00</QuotedPrice>
   </OrderLine>
   <OrderLine>
    <OrderNum>21623</OrderNum>
    <PartNum>KV29</PartNum>
    <NumOrdered>2</NumOrdered>
    <QuotedPrice>1290.00</QuotedPrice>
   </OrderLine>
  </dataroot>

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

  <results>
  {
    for $ord in doc("../premiere/Orders.xml")//Orders,
    $cus in doc("../premiere/Customer.xml")//Customer[CustomerNum = $ord/CustomerNum]    
return
    <row>
      <order number="{ $ord/OrderNum }" />
      <customer name="{ $cus/CustomerName }" />
      {
      let $ln := doc("../premiere/OrderLine.xml")//OrderLine[OrderNum = $ord/OrderNum]
      where $ord/CustomerNum = $cus/CustomerNum
      return
      <orderLine LineItems = "{ count($ln) }" /> 
      }
      {
      for $ln1 in doc("../premiere/OrderLine.xml")//OrderLine[OrderNum = $ord/OrderNum]
      let $total := ($ln1/NumOrdered * $ln1/QuotedPrice)
      return
      <orderRevenue TotalAmount= "{$total}" /> 
      }

    </row>
   }
  </results>

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

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

 <row>
 <order number="21610"/>
 <customer name="Ferguson's"/>
 <orderLine LineItems="2"/>
 <orderRevenue TotalAmount="495"/>
 <orderRevenue TotalAmount="399.99"/>
 </row>

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

 <row>
 <order number="21610"/>
 <customer name="Ferguson's"/>
 <orderLine LineItems="2"/>
 <orderRevenue TotalAmount="894.99"/>

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

1 Ответ

0 голосов
/ 04 ноября 2018
{
for $ln1 in doc("../premiere/OrderLine.xml")//OrderLine[OrderNum = $ord/OrderNum]
let $total := ($ln1/NumOrdered * $ln1/QuotedPrice)
return
  <orderRevenue TotalAmount= "{$total}" /> 
}

следует заменить на

{
let $x:= (
  for $ln1 in doc("../premiere/OrderLine.xml")//OrderLine[OrderNum = $ord/OrderNum]
  let $total := ($ln1/NumOrdered * $ln1/QuotedPrice)
  return
  <orderRevenue TotalAmount= "{$total}" /> )
  return <orderRevenue TotalAmount="{sum($x//@TotalAmount)}"/>
  }
...