我有3张桌子:
每个任务都有成本,一个阶段的成本就是其任务的总和。
我想更新项目中每个阶段的成本,我尝试了以下查询:
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?
能帮我吗!
答案 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。这应该照顾到两种情况。