2014-05-01 29 views
0

我需要乘以几对值并将它们相加,但是我得到的只是一行数字。 (例如:我需要总结的数字是12和13,我需要的是25,我得到的是“1213”)我已经尝试过不同类型的类型转换,并尝试构建解决方法,但是我无法获得到一个解决方案。 (以下简称 “$ X” 变量的值是问题)xquery求和并且乘以

这里是我的代码:

let $hk := doc('http://etutor.dke.uni-linz.ac.at/etutor/XML?id=1')/handelskette 
for $n in distinct-values($hk/kunden/kunde/bonStufe) 

let $k := $hk/kunden/kunde[bonStufe=$n] 
let $c := count($k) 
let $r := $hk/rechnungen/rechnung[kundeNr=$k/@kundeNr]/rposition 
let $x := 0 

order by $n 

return <bStufe val="{$n}"> 
<umsGesamt>{ 
    for $i in $r 
    let $x := sum(xs:integer($i/einzelPreis) * xs:integer($i/menge)) 
    return $x 
}</umsGesamt> 
<umsProKunde>{(:$x div :)$c}</umsProKunde> 
</bStufe> 

$我的样子(我需要总和(einzelPreis *猛恶)):

<rposition> 
    <ean>5-6661-000-0-00</ean> 
    <einzelPreis>500</einzelPreis> 
    <menge>3</menge> 
</rposition> 

我的结果是这样的:

<bStufe val="A"> 
    <umsGesamt>150015752450140004507606001100</umsGesamt> 
    <umsProKunde>5</umsProKunde> 
</bStufe> 
<bStufe val="B"> 
    <umsGesamt>2292250068006602200690070001200045001530</umsGesamt> 
    <umsProKunde>4</umsProKunde> 
</bStufe> 
<bStufe val="C"> 
    <umsGesamt>29010001590130013502600150195012900320010003751000</umsGesamt> 
    <umsProKunde>4</umsProKunde> 
</bStufe> 

我真的很感激一些帮助。

问候 卢卡斯

+0

请不要使用单个数字的变量。他们让理解代码变得不必要的复杂,并且容易出错。 '$ count'而不是'$ c'怎么样?这同样适用于您使用的几乎所有变量名称。 –

+0

当我必须写更多的代码行时,我通常会这样做。 这里唯一重要的变量是$ i(它代表上面描述的位置节点)和$ x,它应该计算应该是所有($ i/einzelPreis * $ i/menge)总和的收入(英语:单位价格*金额) – Lucas

+0

有时候不要这样做,总是这样做。如果你要求别人帮忙,有人必须阅读代码。我想这是一个任务,如果你必须把它交给:有人必须阅读代码。这些简短的变量名不会为你节省任何时间,程序员不得不关心字节和打印字符的时间已经很久了。 –

回答

1

我并没有完全得到你以后,但我敢肯定,反正是什么问题。对我来说,似乎你想计算所有产品的总和。相反,您要返回单个产品的总和。取而代之的

<umsGesamt>{ 
    for $i in $r 
    let $x := sum(xs:integer($i/einzelPreis) * xs:integer($i/menge)) 
    return $x 
}</umsGesamt> 

尝试

<umsGesamt>{ 
    sum(
    for $i in $r 
    let $x := $i/einzelPreis * $i/menge 
    return $x 
) 
}</umsGesamt> 

,或者使用功能轴较短的XQuery 3.0版本步骤

<umsGesamt>{sum($r/(einzelPreis * menge))}</umsGesamt> 

关于线let $x := 0,什么程序之间的差异再次读了函数式编程。在这个答案中也可以找到一个例子:Updating counter in XQuery