2017-06-22 305 views
-3

我試圖做乘法兩列SUM()在SQL SELECT中的所有行,但我不能得到正確的值。我認爲這是由於列中的負值。乘法和SUM()MS SQL

image

所以是它是負值在Antalpallar這樣-1200 * -2應該是-2400,但我不認爲它這樣做,還是?它是進出倉庫的東西。

總之,添加這些togheter的最終值應爲14320,但我得到一個20 000的東西,沒有ABS()(或)一筆5000上的東西。

任何人都知道該怎麼寫SUM(e.Antalperpall * ABS(e.Antalpallar))來得到我想要的價值呢?顯然有一些我錯過了。

SELECT a.Artikelnummer 
    ,a.Artikelnamn 
    ,a.Antalperpall 
    ,COUNT(*) AS AntalArtiklar 
    ,SUM(e.Antalpallar) AS TotalPall 
    ,SUM(e.Antalperpall * ABS(e.Antalpallar)) AS TotalStyck 
FROM Artikel AS a 
INNER JOIN Evig AS e ON a.ArtikelnummerID = e.ArtikelnummerID 
WHERE (e.Datum <= '{0}') 
    AND (a.Kundkund = '{1}') 
    AND (a.Artikelnamn = '{2}') 
GROUP BY a.Artikelnummer 
    ,a.Artikelnamn 
    ,a.Antalperpall 
+2

-1200 * -2?不,這絕對不應該是-2400,它應該是+2400,乘以兩個負數會給你一個正數。你能澄清你在這裏做什麼嗎? –

+0

問題是,如果第二列表示您有多少東西,那麼這意味着在這裏有一個負數?你不僅沒有儲存這些物品,你欠他們兩個的供應商? –

+0

唯一合理的辦法可以得到的14320的總和僅是通過計數的那些與一個正數,因此添加條件'AND(e.Antalperpall> 0)'或'AND(e.Antalpallar> 0)',或兩者,會得到你想要的號碼。 –

回答

0

@fia也許你應該做你的計算首先別處例如在紙上或Excel中,以確保你知道你應該得到什麼。它還可以幫助你在寫入SQL之前計算出計算順序。根據顯示的數字,你所說的數值似乎是正確的,即乘以22,720,然後總和數字,如果使用第二列的絕對值,則爲5,920。如果兩列都使用絕對值,那麼它也會給出22,720。如果您確定需要獲得14,320,那麼您可能需要澄清所需的計算或修改該數字。 enter image description here

此外,你的價值觀可能是錯誤的。如果第二列中第二行和第三行的值分別爲-1和1,則可以得到14,320。 enter image description here

+0

14,320是在nuber我從倉庫傢伙得到了較大的值。數字5920必須是正確的。感謝理查德爲我清理整個數學的事情。 – fia

+0

我是這個論壇的新手,我該如何發一顆心或什麼? – fia

+0

@fia沒問題。樂於幫助。只需將回復標記爲答案或類似內容即可。看到這個[link](https://stackoverflow.com/help/someone-answers) –