Достаточно просто:
(: 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>