Да, дело в NULL
+ что-то приводит NULL
. Чтобы решить эту проблему, оберните каждый sum()
в NVL(sum(),0)
, поэтому, если какая-то конкретная сумма () равна NULL, она преобразуется в 0 и вся сумма будет не нулевой:
nvl(sum(case when col1='something' then 1 else 0 end),0)+ ...
Или всегдаиспользуйте else 0
, как в первом выражении (H).
Обтекание NVL()
решит проблему, даже если столбец получен из соединения, а строки отсутствуют, а сумма равна NULL.