2013-04-21 1 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> 

Требование: Я хочу, чтобы получить общую цену продукции, чтобы 1022 с помощью XQuery. Я написал ниже 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

Вы забыли умножить число элементов в своем запросе. :) –

ответ

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

Большое спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^