xml - xquery 中的 SUM 和 GROUP BY 以及 1 个 xml 文件

标签 xml xquery xmlspy

我有一个 SQL 查询:

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

它从访问数据库返回以下值

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

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

到目前为止我已经有了这个,

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

但是,这会输出每个订单以及运费,就像我一样

SELECT ShipVia, Freight
FROM Orders

在 SQL 中

如何让 xquery 实际上像 SQL 命令那样将每一项相加

例如,这些是 Orders.xml 文件中的三个订单

<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>

编辑:删除不必要的节点(添加重复项)

最佳答案

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

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>

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

关于xml - xquery 中的 SUM 和 GROUP BY 以及 1 个 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9676197/

相关文章:

c++ - MSXML DOM : Add namespace declaration to an existing node in a tree

xml - 使用 P4Merge 合并 XML

xquery - MarkLogic 8 - XQuery - cts 查询以按值查找文档属性

xml - 与将 <complexType> 从一个 XSD 扩展到另一个 XSD 相关的查询

xml - 替代 Altova 的 MissionKit

c# - 跟踪大型 XML 文件的加载进度

java - DOMDocument getNodeValue() 返回 null(包含输出转义字符串)

xml - 如何在 XQuery 中获取节点值的总和?

xml - 将字符串解析转换为 XQuery 和 XPath