SQL Server(避免除以空值)

7 浏览
0 Comments

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)

0
0 Comments

在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,可以避免除以空值的错误。

希望这个解决方案能帮助到你,如果有其他问题,请随时提问。

0