SQL Server(避免除以空值)
SQL Server(避免除以空值)
我有以下查询:\n
UPDATE FinanceTable SET PercentageComplete = (SELECT ( Sum(LabourFinance.HoursTaken / LabourFinance.Hours) / Count(LabourID) ) FROM LabourFinance WHERE FinanceID = (SELECT TOP 1 FinanceID FROM FinanceTable ORDER BY changedate DESC) GROUP BY FinanceID) WHERE FinanceID = (SELECT TOP 1 FinanceID FROM FinanceTable ORDER BY changedate DESC)
\n这个查询的作用是根据changedate选择一个特定的单元格,并将其用于更新FinanceTable中的成本值。\n这种情况给我带来了问题:\n- 我已经分配了100个小时来完成任务\n- 插入表格后,HoursTaken目前为0,因为我还没有开始\n- 在计算PercentageComplete时,SQL Server不允许我进行(0 / 100)的运算,因此导致错误...\n我该如何防止这种情况发生?我希望的结果是PercentageComplete = 0%\n感谢任何意见 🙂 下面是我通过运行上述查询得到的错误消息:\n![错误消息](https://i.stack.imgur.com/OwQTD.jpg)
在SQL Server中,当除以一个空值时,会出现“divide by zero”错误。解决这个问题的方法是使用COALESCE函数来替代除法操作,将除数设置为NULL时的默认值。
以下是一个示例代码,演示了如何使用COALESCE函数来避免除以空值的错误:
UPDATE FinanceTable SET PercentageComplete = ( SELECT COALESCE( SUM(COALESCE(LabourFinance.HoursTaken / NULLIF(LabourFinance.Hours, 0), 0)) / NULLIF(COUNT(LabourID), 0), 0) FROM LabourFinance WHERE FinanceID = ( SELECT TOP 1 FinanceID FROM FinanceTable ORDER BY changedate DESC) GROUP BY FinanceID) WHERE FinanceID = ( SELECT TOP 1 FinanceID FROM FinanceTable ORDER BY changedate DESC)
COALESCE函数返回第一个不为NULL的表达式的值。通过将除数设置为NULL时的默认值为0,可以避免除以空值的错误。
希望这个解决方案能帮助到你,如果有其他问题,请随时提问。