xquery sum和multiply

时间:2014-05-01 18:35:27

标签: sum xquery multiplying

我需要将几对值相乘并将它们相加,但我得到的只是一排数字。 (例如:我需要总结的数字是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>

我真的很感激一些帮助。

最诚挚的问候 卢卡斯

1 个答案:

答案 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