2017-06-22 82 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) –