如果结果为Null,如何将和的结果替换为0

时间:2019-02-19 13:07:28

标签: sql sql-server sql-update aggregate-functions sql-server-2017

我有3张桌子:

  • 项目(一个项目可以有多个阶段)
  • 阶段(一个阶段可以有0个或多个任务)
  • 任务(主键:id_task,id_phase,id_project)

每个任务都有成本,一个阶段的成本就是其任务的总和。

我想更新项目中每个阶段的成本,我尝试了以下查询:

UPDATE Phases SET cost = (SELECT sum(cost) FROM Tasks WHERE Tasks.IDprojet = 'xxx' AND Tasks.RefPhase = Phases.RefPhase)

...但这给了我一些正确的值,其他则为NULL。我使用了SUM(COALESCE(cost,0)),但是什么都没有改变,也许查询是错误的,或者我必须让函数测试Select返回的值是否为null或不更改为0?

能帮我吗!

1 个答案:

答案 0 :(得分:0)

您需要在外部 上使用COALESCE

UPDATE Phases
SET cost = COALESCE((
    SELECT SUM(cost)
    FROM Tasks
    WHERE Tasks.IDprojet = 'xxx' AND Tasks.RefPhase = Phases.RefPhase
), 0)

如果所有值均为NULL,则SUM函数将返回NULL。如果没有匹配的行,则子查询将返回NULL。这应该照顾到两种情况。