我需要将几对值相乘并将它们相加,但我得到的只是一排数字。 (例如:我需要总结的数字是12和13,我需要的是25,我得到的是“1213”)我已经尝试了不同类型的类型转换并尝试构建变通方法,但我无法达到一个办法。 (“$ x”变量的值是问题)
这是我的代码:
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 * menge)):
<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 :(得分: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。