2013-04-21 36 views
1

在下面的xml:如何在添加XQuery中少数节点的值后获取不同的值?

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

它返回的订单号与seprated总价“ - ”符号,但是,返回由于订单中的多个项目重复。 当前结果:

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

预期的结果:

1000-2 1001-3 1022-6 

任何帮助来获得的订单数量的不同值与总价格???

+0

为什么你在这里添加C#标签?我没有看到与C#相关的任何内容。 – 2013-04-21 15:59:21

+0

您忘了再次购买已购物品的数量。 – 2013-04-21 16:11:08

回答

2

使用我在其他问题中提出的价格计算,并针对每个订单运行它。两个问题的问题完全相同,将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 
    ) 
) 
+0

再次感谢。还有一件事:获取员工数量和他们的总销售额。我写的查询: $ e in/mo/employees/employee, $ o in/mo/orders/order where data($ e/@ eno)= data($ o/@ takenBy) return concat (数据($ e/@ eno),' - ',count($ o/@ ono)) – 2013-04-21 16:27:09

+0

它与订单中的情况相同。你能否为我提供这个完美的查询。谢谢 – 2013-04-21 16:27:57

+0

这与在这个问题中的问题完全相同,如果你想交换一些XPath表达式(和变量名,如果你想的话),你没有任何事情要做。我很确定你能够自己做,你最好自己做功课。 – 2013-04-21 16:31:36