2012-03-12 73 views
0

即时通过XQuery来计算两年内的销售量,它基于SQL查询。将SQL查询转换为计算双年销售额的XQuery。

SELECT [ShipCountry] & " " & [ShipCity] AS CountryAndCity, COUNT(OrderID) AS BiYearlySales 
FROM Orders 
WHERE (((OrderDate) BETWEEN #1/1/1996# And #1/1/1998#)) 
GROUP BY [ShipCountry] & " " & [ShipCity]; 

这是我到目前为止的xquery,但它只计算每个实例一次。不能找出原因。 我正在使用Altova xmlspy - xquery 1.0。

<Result> 
{ 
for $a in doc("Orders.xml")/dataroot/Orders 
let $b := concat($a/ShipCountry, " ", $a/ShipCity) 
where $a/OrderDate >= '1996-01-01T00:00:00' and $a/OrderDate <= '1998-01-01T00:00:00' 
return 
<BiYearlySales> 
    <CountryNameAndCity>{$b}</CountryNameAndCity> 
    <OrderCount>{count($a)}</OrderCount> 
</BiYearlySales> 
} 
</Result> 

我意识到我还没有完成组,但试图让这个工作更重要。

+0

仅供参考,我们有两个人要求完全相同的作业帮助。查看标记为xquery的其他最近问题可能会有帮助。 – 2012-03-13 00:20:01

回答

0

不知道这是完全正确的......(还没有尝试过),但这样的事情:

for $country in doc("Orders.xml")/dataroot/Orders[OrderDate ge '1996-01-01T00:00:00' and OrderDate le '1998-01-01T00:00:00']/ShipCountry, $city in doc(doc("Orders.xml")/dataroot/Orders[OrderDate ge '1996-01-01T00:00:00' and OrderDate le '1998-01-01T00:00:00']/ShipCity") 
return 
<sales> 
    <geo>{$country, " ", $city)}</geo> 
    <count>{count(doc("Orders.xml")/dataroot/Orders 
      [OrderDate ge '1996-01-01T00:00:00' and OrderDate le '1998-01-01T00:00:00' 
      and ShipCountry eq $country and ShipCity eq $city])} 
    </count> 
</sales>