如果sum为Null,如何用0替换sum的结果
how to replace the result of sum by 0 if it is Null
我有 3 个表:
- 项目(一个项目可以有多个阶段)
- 阶段(一个阶段可以有 0 个或多个任务)
- 任务(主键:id_task、id_phase、id_project)
每个任务都有成本,一个阶段的成本是其任务的 SUM(成本)。
我想更新项目中每个阶段的成本,我试过这个查询:
UPDATE Phases SET cost = (SELECT sum(cost) FROM Tasks WHERE Tasks.IDprojet = 'xxx' AND Tasks.RefPhase = Phases.RefPhase)
...但这给了我一些正确的值,而其他值是 NULL。我使用了 SUM(COALESCE(cost,0))
但没有任何改变,也许查询是错误的,或者我必须制作函数来测试 Select 返回的值是否为空或不被更改为 0?
你能帮帮我吗!
你需要在外面使用COALESCE
:
UPDATE Phases
SET cost = COALESCE((
SELECT SUM(cost)
FROM Tasks
WHERE Tasks.IDprojet = 'xxx' AND Tasks.RefPhase = Phases.RefPhase
), 0)
如果所有值都为 NULL,SUM
函数将 return NULL。如果没有匹配的行,子查询将 return NULL。这应该处理这两种情况。
我有 3 个表:
- 项目(一个项目可以有多个阶段)
- 阶段(一个阶段可以有 0 个或多个任务)
- 任务(主键:id_task、id_phase、id_project)
每个任务都有成本,一个阶段的成本是其任务的 SUM(成本)。
我想更新项目中每个阶段的成本,我试过这个查询:
UPDATE Phases SET cost = (SELECT sum(cost) FROM Tasks WHERE Tasks.IDprojet = 'xxx' AND Tasks.RefPhase = Phases.RefPhase)
...但这给了我一些正确的值,而其他值是 NULL。我使用了 SUM(COALESCE(cost,0))
但没有任何改变,也许查询是错误的,或者我必须制作函数来测试 Select 返回的值是否为空或不被更改为 0?
你能帮帮我吗!
你需要在外面使用COALESCE
:
UPDATE Phases
SET cost = COALESCE((
SELECT SUM(cost)
FROM Tasks
WHERE Tasks.IDprojet = 'xxx' AND Tasks.RefPhase = Phases.RefPhase
), 0)
如果所有值都为 NULL,SUM
函数将 return NULL。如果没有匹配的行,子查询将 return NULL。这应该处理这两种情况。