title: XQuery to group based on two variables
body: <p>I have xml like this </p>
  
  <pre><code>&lt;?xml version="1.0"?&gt;
   &lt;xmldb&gt;
   &lt;centers&gt;
      &lt;center id="0000100001" status="unsynced"&gt;
      &lt;meetingdate&gt;2011-01-13&lt;/meetingdate&gt;
      &lt;cname&gt;Center1&lt;/cname&gt;
      &lt;cfe empid="1001"&gt;FE1&lt;/cfe&gt;
      &lt;groups&gt;
          &lt;group id="0000100002"&gt;
          &lt;name&gt;Group11&lt;/name&gt;
           &lt;members&gt;
              &lt;member id="0000100002"&gt;
                  &lt;fname&gt;member111&lt;/fname&gt;
                  &lt;lname&gt;ln111&lt;/lname&gt;
                      &lt;loandetails&gt;
                      &lt;loan&gt;
                          &lt;productname&gt;IGL1&lt;/productname&gt;
                          &lt;loanacctnum&gt;0010000000001&lt;/loanacctnum&gt;
                          &lt;instnum&gt;23&lt;/instnum&gt;
                          &lt;disbAmount&gt;8000&lt;/disbAmount&gt;
                          &lt;disbDate&gt;12/06/2010&lt;/disbDate&gt;
                          &lt;prdue&gt;250&lt;/prdue&gt;
                          &lt;indue&gt;25&lt;/indue&gt;
                          &lt;loanbalancePrincipal&gt;2500&lt;/loanbalancePrincipal&gt;
                          &lt;loanbalanceIntrest&gt;250&lt;/loanbalanceIntrest&gt;
                          &lt;amountpaid&gt;0&lt;/amountpaid&gt;
                          &lt;attn&gt;A&lt;/attn&gt;
                      &lt;/loan&gt;
                      &lt;loan&gt;
                          &lt;productname&gt;EDU&lt;/productname&gt;
                          &lt;loanacctnum&gt;0010000000001&lt;/loanacctnum&gt;
                          &lt;instnum&gt;23&lt;/instnum&gt;
                          &lt;disbAmount&gt;2000&lt;/disbAmount&gt;
                          &lt;disbDate&gt;12/06/2010&lt;/disbDate&gt;
                          &lt;prdue&gt;110&lt;/prdue&gt;
                          &lt;indue&gt;25&lt;/indue&gt;
                          &lt;loanbalancePrincipal&gt;2500&lt;/loanbalancePrincipal&gt;
                          &lt;loanbalanceIntrest&gt;250&lt;/loanbalanceIntrest&gt;
                          &lt;amountpaid&gt;0&lt;/amountpaid&gt;
                       &lt;/loan&gt;
                      &lt;/loandetails&gt;
              &lt;/member&gt;
              &lt;member id="0000100002"&gt;
                  &lt;fname&gt;member111&lt;/fname&gt;
                  &lt;lname&gt;ln111&lt;/lname&gt;
                      &lt;loandetails&gt;
                      &lt;loan&gt;
                          &lt;productname&gt;IGL1&lt;/productname&gt;
                          &lt;loanacctnum&gt;0010000000001&lt;/loanacctnum&gt;
                          &lt;instnum&gt;23&lt;/instnum&gt;
                          &lt;disbAmount&gt;8000&lt;/disbAmount&gt;
                          &lt;disbDate&gt;12/06/2010&lt;/disbDate&gt;
                          &lt;prdue&gt;250&lt;/prdue&gt;
                          &lt;indue&gt;25&lt;/indue&gt;
                          &lt;loanbalancePrincipal&gt;2500&lt;/loanbalancePrincipal&gt;
                          &lt;loanbalanceIntrest&gt;250&lt;/loanbalanceIntrest&gt;
                          &lt;amountpaid&gt;0&lt;/amountpaid&gt;
                      &lt;/loan&gt; 
                      &lt;/loandetails&gt;
              &lt;/member&gt;
              &lt;member id="0000100002"&gt;
                  &lt;fname&gt;member112&lt;/fname&gt;
                  &lt;lname&gt;ln111&lt;/lname&gt;
                      &lt;loandetails&gt;
                      &lt;loan&gt;
                          &lt;productname&gt;IGL1&lt;/productname&gt;
  
                          &lt;loanacctnum&gt;0010000000001&lt;/loanacctnum&gt;
                          &lt;instnum&gt;23&lt;/instnum&gt;
                          &lt;disbAmount&gt;8000&lt;/disbAmount&gt;
                          &lt;disbDate&gt;12/06/2010&lt;/disbDate&gt;
                          &lt;prdue&gt;250&lt;/prdue&gt;
                          &lt;indue&gt;25&lt;/indue&gt;
                          &lt;loanbalancePrincipal&gt;2500&lt;/loanbalancePrincipal&gt;
                          &lt;loanbalanceIntrest&gt;250&lt;/loanbalanceIntrest&gt;
                          &lt;amountpaid&gt;0&lt;/amountpaid&gt;
                      &lt;/loan&gt; 
                      &lt;/loandetails&gt;
              &lt;/member&gt;
              &lt;member id="0000100003"&gt;
                  &lt;fname&gt;member113&lt;/fname&gt;
                  &lt;lname&gt;ln111&lt;/lname&gt;
                      &lt;loandetails&gt;
                          &lt;loan&gt;
                          &lt;productname&gt;IGL1&lt;/productname&gt;
                          &lt;loanacctnum&gt;0010000000001&lt;/loanacctnum&gt;
                          &lt;instnum&gt;23&lt;/instnum&gt;
                          &lt;disbAmount&gt;8000&lt;/disbAmount&gt;
                          &lt;disbDate&gt;12/06/2010&lt;/disbDate&gt;
                          &lt;prdue&gt;250&lt;/prdue&gt;
                          &lt;indue&gt;25&lt;/indue&gt;
                          &lt;loanbalancePrincipal&gt;2500&lt;/loanbalancePrincipal&gt;
                          &lt;loanbalanceIntrest&gt;250&lt;/loanbalanceIntrest&gt;
                          &lt;amountpaid&gt;0&lt;/amountpaid&gt;
                          &lt;/loan&gt;
                      &lt;/loandetails&gt;
              &lt;/member&gt;
          &lt;/members&gt;  
          &lt;/group&gt;
          &lt;group id="0000100003"&gt;
          &lt;name&gt;Group12&lt;/name&gt;
          &lt;members&gt;
              &lt;member id="0000100003"&gt;
                  &lt;fname&gt;member113&lt;/fname&gt;
                  &lt;lname&gt;ln111&lt;/lname&gt;
                      &lt;loandetails&gt;
                          &lt;loan&gt;
                          &lt;productname&gt;IGL1&lt;/productname&gt;
  
                          &lt;loanacctnum&gt;0010000000001&lt;/loanacctnum&gt;
                          &lt;instnum&gt;23&lt;/instnum&gt;
                          &lt;disbAmount&gt;8000&lt;/disbAmount&gt;
                          &lt;disbDate&gt;12/06/2010&lt;/disbDate&gt;
                          &lt;prdue&gt;250&lt;/prdue&gt;
                          &lt;indue&gt;25&lt;/indue&gt;
                          &lt;loanbalancePrincipal&gt;2500&lt;/loanbalancePrincipal&gt;
                          &lt;loanbalanceIntrest&gt;250&lt;/loanbalanceIntrest&gt;
                          &lt;amountpaid&gt;0&lt;/amountpaid&gt;
                          &lt;/loan&gt;
                      &lt;/loandetails&gt;
              &lt;/member&gt;
          &lt;/members&gt;  
          &lt;/group&gt;
      &lt;/groups&gt;   
      &lt;/center&gt;
    &lt;/centers&gt;
   &lt;/xmldb&gt;
  </code></pre>
  
  <p>And need to aggregate data based on centeris and meeting date</p>
  
  <p>So I query lie this </p>
  
  <pre><code>let $allItems := /xmldb/centers/center
  for $d in distinct-values($allItems/@id)
  for $n in distinct-values($allItems/meetingdate/text())
  let $items := $allItems[@id = $d and meetingdate/text() = $n]
  order by $items
  return if (exists($items))
  then &lt;center id="{$d}" &gt;
  &lt;date&gt;{$n}&lt;/date&gt;
  &lt;totaldue&gt;{sum($items/groups/group/members/member/loandetails/loan/prdue)}&lt;/totaldue&gt;
  &lt;/center&gt;
  else ( )
  </code></pre>
  
  <p>which returs data like this</p>
  
  <pre><code>&lt;center id="0000100003"&gt;
    &lt;date&gt;2011-01-11&lt;/date&gt;
    &lt;totaldue&gt;610&lt;/totaldue&gt;
  &lt;/center&gt;
  &lt;center id="0000100001"&gt;
    &lt;date&gt;2011-01-13&lt;/date&gt;
    &lt;totaldue&gt;1360&lt;/totaldue&gt;
  &lt;/center&gt;
  &lt;center id="0000100002"&gt;
    &lt;date&gt;2011-01-13&lt;/date&gt;
    &lt;totaldue&gt;610&lt;/totaldue&gt;
  &lt;/center&gt;
  </code></pre>
  
  <p>But I need data in this format</p>
  
  <pre><code>  &lt;date value=2011-01-11&gt;
       &lt;center id="0000100003"&gt;
          &lt;totaldue&gt;610&lt;/totaldue&gt;
       &lt;/center&gt;
    &lt;/date&gt;
    &lt;date value=2011-01-13&gt;
       &lt;center id="0000100001"&gt;
          &lt;totaldue&gt;1360&lt;/totaldue&gt;
       &lt;/center&gt;
       &lt;center id="0000100002"&gt;
          &lt;totaldue&gt;610&lt;/totaldue&gt;
       &lt;/center&gt;
    &lt;/date&gt;
  </code></pre>