2013-04-21 42 views
2

在下面的xml中,有兩種與部件和訂單相關的信息。 XML:如何在XQuery中獲取節點值的總和?

<mo> 
     <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" > 
      <receivedDate>1967-08-17</receivedDate> 
      <shippedDate>1967-08-13</shippedDate> 
      <items> 
       <item> 
        <partNumber>10508</partNumber> 
        <quantity>2</quantity> 
       </item> 
      </items> 
     </order> 
     <order ono="1001" > 
      <receivedDate>1968-08-14</receivedDate> 
      <shippedDate>1968-08-11</shippedDate> 
      <items> 
       <item> 
        <partNumber>10000</partNumber> 
        <quantity>2</quantity> 
       </item> 

      </items> 
     </order> 

     <order ono="1022"> 
      <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來獲得產品的總價格,以1022。我已經寫了下面的XQuery讓零件價格的總和,從而沒有1022

的XQuery:

for 
$o in /mo/orders/order, 
$p in /mo/parts/part 
where 
data($o/@ono) = ("1022") 
and 
data($p/@pno) = $o/items/item/partNumber 
return fn:sum($p/price) 

但是,這個查詢返回的部分價格,但不是總價格。 其結果是:3 2 1

任何人都知道如何獲得價格總和?

+0

您忘記了與查詢中的項目數相乘。 :) – 2013-04-21 10:45:51

回答

4

您正在總結各個值。將fn:sum()全部圍繞查詢計算每件商品的單獨價格。

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

非常感謝 – 2013-04-21 14:45:39

相關問題