如何在XQuery中添加几个节点的值后得到不同的值



在xml下面:

<mo>
    <customers>
    <customer cno="2222">
            <cname>Charles</cname>
            <street>123 Main St.</street>
            <city>Wichita</city>
            <zip>67226</zip>
            <phone>316-636-5555</phone>
        </customer>
        <customer cno="1000">
            <cname>Bismita</cname>
            <street>Ashford Dunwoody</street>
            <city>Wichita</city>
            <zip>67226-1555</zip>
            <phone>000-000-0000</phone>
        </customer>     
    </customers>
    <employees>
    <employee eno="1000">
            <ename>Jones</ename>
            <city>Wichita</city>
            <zip>67226-1555</zip>
            <hdate>1995-12-12</hdate>
        </employee>
        <employee eno="2000">
            <ename>Asmit</ename>
            <city>Wichita</city>
            <zip>67226-1555</zip>
            <hdate>1967-08-13</hdate>
        </employee>
        <employee eno="1003">
            <ename>Axaya</ename>
            <city>BBSR</city>
            <zip>67226</zip>
            <hdate>1978-08-13</hdate>
        </employee>     
    </employees>

    <parts>
        <part pno="10506">          
            <pname>Land Before Time I</pname>
            <qoh>200</qoh>
            <price>319.99</price>
            <level>20</level>
        </part>
        <part pno="10000">          
            <pname>Bottle</pname>
            <qoh>2</qoh>
            <price>3.00</price>
            <level>2</level>
        </part>
        <part pno="10508">          
            <pname>Land Before Time 3</pname>
            <qoh>202</qoh>
            <price>2.00</price>
            <level>22</level>
        </part>
        <part pno="10509">          
            <pname>Cycle</pname>
            <qoh>202</qoh>
            <price>1.00</price>
            <level>22</level>
        </part>
    </parts>
    <orders>    
        <order ono="1000" takenBy="1000" customer="2222" >
            <receivedDate>1967-08-17</receivedDate>
            <shippedDate>1967-08-13</shippedDate>
            <items>
                <item>
                    <partNumber>10508</partNumber>
                    <quantity>2</quantity>
                </item>
            </items>
        </order>
        <order ono="1001" takenBy="1000" customer="1000" >
            <receivedDate>1968-08-14</receivedDate>
            <shippedDate>1968-08-11</shippedDate>
            <items>
                <item>
                    <partNumber>10000</partNumber>
                    <quantity>2</quantity>
                </item>
            </items>
        </order>
        <order ono="1022" takenBy="1003"  customer="2222" >
            <receivedDate>1995-02-14</receivedDate>
            <shippedDate>1995-02-13</shippedDate>
            <items>
                <item>
                    <partNumber>10000</partNumber>
                    <quantity>1</quantity>
                </item>
                <item>
                    <partNumber>10508</partNumber>
                    <quantity>2</quantity>
                </item>
                <item>
                    <partNumber>10509</partNumber>
                    <quantity>3</quantity>
                </item>
            </items>
        </order>
    </orders>
</mo>

如何获得订单号和每个订单的总价?我试过下面的xquery:

for
$o in /mo/orders/order,
$p in /mo/parts/part
where
$o/items/item/partNumber = data($p/@pno) 
return concat(data($o/@ono),'-', sum($p/price))

它返回订单号,总价用'-'符号分隔,但是,由于订单中有多个项目,它返回重复的订单号。目前的结果:

1000-2 1001-3 1022-3 1022-2 1022-1

预期结果:

1000-2 1001-3 1022-6

有什么帮助来获得订单号和总价的不同值吗?

使用我在你的另一个问题中提出的价格计算,并对每个订单运行它。这两个问题的问题是完全一样的,把fn:sum()放在了错误的位置。

for $order in /mo/orders/order
return concat
  (
    $order/@ono,
    '-',
    fn:sum(
      for $item in $order/items/item
      return /mo/parts/part[@pno = $item/partNumber]/price * $item/quantity
    )
  )

最新更新