2012-12-05 43 views
0

我想看看有多少车次已被送往加州两个日期计数XQuery中给出奇怪的结果

我有如下当前的XQuery中:

for $x in doc("triptracker.xml")/data/cities/city, 
    $y in doc("triptracker.xml")/data/trips/trip 
let $date as xs:date := xs:date($y/date) 
where $x/cityName = $y/cityName and $x/state = "CA" and 
$date gt xs:date("2003-01-01") and $date lt xs:date("2006-12-31") 
return <Result>Trips to California: {count($y)}</Result> 

这给了我结果集

<Result>Trips to California: 1</Result> 
<Result>Trips to California: 1</Result> 
<Result>Trips to California: 1</Result> 
<Result>Trips to California: 1</Result> 
<Result>Trips to California: 1</Result> 

而不是只给我5

这里的计数是个XML数据的e型所给出的行程和城市

<trips> 
    <trip> 
     <ssn>123-20-4567</ssn> 
     <cityName>Tucson</cityName> 
     <date>2001-08-11</date> 
    </trip> 
</trips> 
<cities> 
    <city> 
     <cityName>Houston</cityName> 
     <state>TX</state> 
     <location> 
      <latitude>29.76045</latitude> 
      <longitude>-95.369784</longitude> 
     </location> 
    </city> 
</cities> 

任何帮助,将不胜感激

回答

0

我最终注意到,通过维权,我不可能只得到1个计数所以我修改它使用让

let $x := doc("triptracker.xml")/data/cities/city[state = "CA"], 

$y := doc("triptracker.xml")/data/trips/trip[cityName=$x/cityName 
and xs:date(date) gt xs:date("2003-01-01") 
and xs:date(date) lt xs:date("2006-12-31")] 

return <Result>Trips to California: {count($y)}</Result> 
+0

正确。 “for”表达式的return子句对于“in”表达式的每个值都会被评估一次(或者如果存在多个“for”子句,那么对于每个组合都会进行一次),因此在return子句中没有办法进行聚合 - 不需要这样做,因为如果你要聚合一个序列,那么你不需要迭代序列。 –