как заменить результат суммирования на 0, если он равен Null - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть 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, если оно равно нулю или не должно быть изменено на 0?

Не могли бы вы помочь мне?пожалуйста!

1 Ответ

0 голосов
/ 19 февраля 2019

Вам необходимо использовать COALESCE на снаружи :

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

Функция SUM вернет NULL, если все значения были NULL.Подзапрос вернет NULL, если не найдено ни одной строки.Это должно позаботиться об обоих случаях.

...