2017-06-13 69 views
-1

我需要从SQL列中获取总数,但它不工作,任何人都可以看到我做错了什么。选择SUM()SQL

SELECT a.Artikelnummer 
    ,a.Artikelnamn 
    ,a.Antalperpall 
    ,COUNT(*) AS AntalArtiklar 
    ,SUM(e.Antalpallar) AS TotalPall 
    ,SUM(e.Antalperpall) 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 

SUM(e.Antalperpall)AS TotalStyck:这是谁返回一个奇怪的值。我想要做的是取每行的整数值并从中得到总数。

好吧,我去了地下室,并访问了服务器,我发现这个问题。我需要像这样SUM(e.Antalperpall * ABS(e.Antalpallar))与Antalpallar相乘。但它仍然不起作用,我认为这是负面价值的原因。

se data here

所以它是这样的Antalpallar是负面的价值-1200 * -2应该是-2400,但我不认为它这样做,还是?它是进出仓库的东西。

无论如何,增加那些togheter的最终值应该是14320,但我得到一个20 000的东西,没有ABS()(或与)5000的东西总和。

任何人都知道如何写这个SUM(e.Antalperpall * ABS(e.Antalpallar))来获得我想要的值?

+1

Antalpallar和Antalperpall的数据类型是什么? – apomene

+0

这不工作意味着你得到什么?你能更好地解释什么是“奇怪的”价值吗?尝试将字段强制转换为int – MiloBellano

+1

您能告诉我们一些示例数据,从样本数据总结中返回什么以及您期望的是什么,这样我们可以计算出 – MarkD

回答

0

您可能想要通过消除Antalperpall中是否有任何奇怪的值(字符)来尝试它。使用sum(cast(e.Antalperpall作为货币))和条款 其中ISNUMERIC(e.Antalperpall)= 1。如果在该字段中有任何stange值,您将显然会得到转换错误。