【问题标题】:how to replace the result of sum by 0 if it is Null如果为 Null,如何将 sum 的结果替换为 0
【发布时间】:2019-02-19 13:07:27
【问题描述】:

我有 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?

你能帮帮我吗!

【问题讨论】:

  • 您使用的是什么 DBMS?这个问题的答案因他们而异。
  • 我使用的是 Sql server 2017

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


【解决方案1】:

你需要在外面使用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。这应该兼顾这两种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多