带有 1 个 xml 文件的 xquery 中的 SUM 和 GROUP BY [英] SUM and GROUP BY in xquery with 1 xml file

查看:30
本文介绍了带有 1 个 xml 文件的 xquery 中的 SUM 和 GROUP BY的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 SQL 查询:

I have an SQL query:

SELECT ShipVia, SUM(Freight)
FROM Orders
GROUP BY ShipVia

从访问数据库返回以下值

which returns the values below from the access database

Ship Via  TotalFreight
   1       $16,185.33
   2       $28,244.85
   3       $20,512.51

我正在尝试将其转换为 xquery(使用 xquery 1.0)

I am trying to convert this to xquery (using xquery 1.0)

到目前为止,我有这个,

So far I have this,

xquery version "1.0";
for $x in doc("Orders.xml")/dataroot/Orders
return
<OrderDetails>
{
    $x/ShipVia,
    <TotalFreight>{sum($x/Freight)}</TotalFreight>
}
</OrderDetails>

然而,这会像我一样输出每个订单以及运费

This however, outputs every single order along with the freight cost as if I did

SELECT ShipVia, Freight
FROM Orders

在 SQL 中

如何让 xquery 像 SQL 命令一样实际添加每一项

How do I make the xquery actually add each one up as the SQL command does

例如,这是来自 Orders.xml 文件的三个订单

These are three orders from the Orders.xml file for example

<dataroot>
    <Orders>
        <ShipVia>1</ShipVia>
        <Freight>32.38</Freight>
    </Orders>
    <Orders>
        <ShipVia>1</ShipVia>
        <Freight>11.61</Freight>
    </Orders>
    <Orders>
        <ShipVia>2</ShipVia>
        <Freight>65.83</Freight>
    </Orders>
</dataroot>

去除不必要的节点(添加重复)

Stripped Unnecessary Nodes (Added Duplicate)

推荐答案

以下是在 XQuery 1.0(缺少 XQuery 3.0 的原生 group by 运算符)中执行此操作的一种方法:>

The following is one approach to doing this in XQuery 1.0 (which lacks XQuery 3.0's native group by operator):

let $doc := 
    <dataroot>
        <Orders>
            <ShipVia>1</ShipVia>
            <Freight>32.38</Freight>
        </Orders>
        <Orders>
            <ShipVia>1</ShipVia>
            <Freight>11.61</Freight>
        </Orders>
        <Orders>
            <ShipVia>2</ShipVia>
            <Freight>65.83</Freight>
        </Orders>
    </dataroot>

let $ship_via_values := distinct-values($doc/Orders/ShipVia/text())
for $ship_via_value in $ship_via_values
return
  <OrderDetails>
    <ShipVia>{$ship_via_value}</ShipVia>
    <TotalFreight>{
      sum($doc/Orders[ShipVia=$ship_via_value]/Freight)
    }</TotalFreight>
  </OrderDetails>

此查询返回以下结果:

<OrderDetails>
  <ShipVia>1</ShipVia>
  <TotalFreight>43.99</TotalFreight>
</OrderDetails>
<OrderDetails>
  <ShipVia>2</ShipVia>
  <TotalFreight>65.83</TotalFreight>
</OrderDetails>

...这似乎是所需的输出.

...which appears to be desired output.

这篇关于带有 1 个 xml 文件的 xquery 中的 SUM 和 GROUP BY的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆