SQL数学语法难度与除法

时间:2012-09-25 12:34:00

标签: sql sql-server

无法理解为什么我无法得到正确的答案。我正在尝试计算净利润百分比,但是除数部分被忽略了。希望真的很简单吗?

SUM(
    (dbo.K3_TradeTeam_Sales2.TotalSales - dbo.K3_TradeTeam_SalesReturn3.TotalCredits)
    ISNULL(dbo.K3_TradeTeam_Purch1.TotalPurchases, 0) / 
           dbo.K3_TradeTeam_Sales2.TotalSales
   ) AS NetMargin

3 个答案:

答案 0 :(得分:0)

sql逻辑应该可行。 你确定TotalPurchases不是null吗?因为这使得看起来像devide被忽略了,但是devide只返回0.所以我做零减零!

示例:

select SUM((200 - 100) - ISNULL(100, 0) / 10) AS NetMargin --returns 90
select SUM((200 - 100) - ISNULL(null, 0) / 10) AS NetMargin --return 100

答案 1 :(得分:0)

要获得净利润,您可能需要这样的表达式,

(
    SUM(
            dbo.K3_TradeTeam_Sales2.TotalSales
        - 
            COALESCE(dbo.K3_TradeTeam_SalesReturn3.TotalCredits, 0.0)
        -
            COALESCE(dbo.K3_TradeTeam_Purch1.TotalPurchases, 0.0)
       )
/ 
    SUM(
            dbo.K3_TradeTeam_Sales2.TotalSales
       )
) AS NetMargin

然而,在不知道您的架构的情况下,我无法确定。当您的总销售额为0.0时,这也会失败。


我假设您希望每个实现的净利润总和除以每个关系的总收入之和。这将为您提供所有关系的累积利润率。

答案 2 :(得分:0)

当我无法使数学公式工作时,我暂时更改选择以简单地查看每个字段的值以及计算。然后我可以手动完成calualtion,看看我是如何得到我得到的结果,这几乎总是指出我的问题。

select 
    dbo.K3_TradeTeam_Sales2.TotalSales, 
    dbo.K3_TradeTeam_SalesReturn3.TotalCredits,
    ISNULL(dbo.K3_TradeTeam_Purch1.TotalPurchases, 0), 
    dbo.K3_TradeTeam_Sales2.TotalSales 
From...

如果没有case语句来处理除数为0的问题,我也从不进行除法。即使我认为它永远不会发生,我已经看到它经常烧人,不考虑某些事情(包括糟糕的数据输入)可能会在未来发生。