| declare namespace rpt="http://www.example.com/Report"; | |
| (: insert-start :) | |
| declare variable $input-context external; | |
| (: insert-end :) | |
| let $orders := $input-context/purchaseOrder | |
| [@orderDate ge xs:date("1999-09-01") | |
| and @orderDate le xs:date("1999-12-31")] | |
| let $items := $orders/items/item | |
| let $zips := distinct-values($orders/billTo/zip) | |
| let $parts := distinct-values($items/@partNum) | |
| return | |
| <rpt:purchaseReport> | |
| <rpt:regions> | |
| { | |
| for $zip in $zips | |
| order by $zip | |
| return | |
| <rpt:zip code="{$zip}"> | |
| { | |
| for $part in $parts | |
| let $hits := $orders[ billTo/zip = $zip and items/item/@partNum = $part] | |
| let $quantity := sum($hits//item[@partNum=$part]/quantity) | |
| where count($hits) > 0 | |
| order by $part | |
| return | |
| <rpt:part number="{$part}" quantity="{$quantity}"/> | |
| } | |
| </rpt:zip> | |
| } | |
| </rpt:regions> | |
| <rpt:parts> | |
| { | |
| for $part in $parts | |
| return | |
| <rpt:part number="{$part}"> | |
| { | |
| string($items[@partNum = $part]/productName) | |
| } | |
| </rpt:part> | |
| } | |
| </rpt:parts> | |
| </rpt:purchaseReport> | |