declare namespace rpt="http://www.example.com/Report" let $orders := collection("orders")/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 { for $zip in $zips order by $zip return { 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 } } { for $part in $parts return { string($items[@partNum = $part]/productName) } }