无法理解为什么我无法得到正确的答案。我正在尝试计算净利润百分比,但是除数部分被忽略了。希望真的很简单吗?
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
答案 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的问题,我也从不进行除法。即使我认为它永远不会发生,我已经看到它经常烧人,不考虑某些事情(包括糟糕的数据输入)可能会在未来发生。