目前我正在尝试对两列求和,然后除以另一列,例如;
'''SUM(M.Bonus) + ISNULL(SUM(Q.Bonus),0) / SUM(Salary.M)'''
Q.Bonus
包含null
值。如果我删除 ISNULL,它会给我正确的答案,但由于空值而不会计算一些。当我用ISNULL
做这件事时,它只是给了我总和的结果。
从你非常简短的问题中,我猜你有一个基本的BODMAS数学问题
SUM(M.Bonus) + ISNULL(SUM(Q.Bonus),0) / SUM(Salary.M)
应该是
(SUM(M.Bonus) + ISNULL(SUM(Q.Bonus),0)) / SUM(Salary.M)
请注意额外的括号!
如果没有进一步的上下文和示例代码,就很难看到您真正在问什么。 有关提出好问题的更多信息,请参阅此页面。
您需要更正ISNULL()
函数语法。
您需要注意devide by zero
错误,如下所示。
此查询为您提供答案。
SUM(ISNULL(M.Bonus,0)) + SUM(ISNULL(Q.Bonus,0)) / ISNULL(SUM(ISNULL(M.Salary,0)),1)
注意:我认为您可能写错了工资别名。所以,我已经纠正了。
我认为你想要一些类似的东西。您只需要一个聚合。还要加上括号以确保正确执行计算。
SUM((M.Bonus + ISNULL(Q.Bonus, 0)) / M.Salary)
您需要额外的括号。 但我建议使用NULLIF()
来避免被零除错误:
(SUM(M.Bonus) + COALESCE(SUM(Q.Bonus), 0)) / NULLIF(SUM(Salary.M), 0)