Group By в xquery - PullRequest
       27

Group By в xquery

1 голос
/ 05 марта 2012

Я пытаюсь преобразовать следующий код в xquery, чтобы результаты остались прежними.Я пытаюсь рассчитать общую стоимость фрахта для каждого клиента1009 *

Это то, что я имею до сих пор

for $o in doc("Orders.xml")/dataroot/Orders,
    $c in doc("Customers.xml")/dataroot/Customers[CustomerID = $o/CustomerID] 

return
<OrderDetails>
{
    $c/CompanyName,
    sum($o/Freight)
}
</OrderDetails>

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Достаточно просто:

(: select only customers with at least one order :)
for $c in doc("Customers.xml")/dataroot/Customers
  [doc("Orders.xml")/dataroot/Orders/CustomerID=./CustomerID]

(: get the list of orders for this customer :)
let $o := doc("Orders.xml")/dataroot/Orders[CustomerID = $c/CustomerID] 

(: ...and properly encapsulate the calculated value in the result :)
return
  <OrderDetails>
    {$c/CompanyName}
    <TotalFreight>{sum($o/Freight)}</TotalFreight>
  </OrderDetails>

Однако у предоставленных вами тестовых данных нет соответствующих CustomerID s, поэтому для этого запроса ничего не возвращается; Я должен был сделать свой собственный макет. После этого я получаю вывод, похожий на следующий:

<OrderDetails>
  <CompanyName>Alfreds Futterkiste</CompanyName>
  <TotalFreight>45.58</TotalFreight>
</OrderDetails>
0 голосов
/ 14 августа 2012

На самом деле, начиная с XQuery 3.0 существует стандартизированная "группа по" для выражений FLWOR .

...