2014-05-01 40 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