Как работать с Null в суммировании - PullRequest
1 голос
/ 27 апреля 2011

Я делаю tot := tot + v_row.SAVINGS;, где tot инициализируется в 0, а v_row.SAVINGS инициализируется в null.

Теперь я использую nvl function, чтобы получить значение 0 вместо null для v_row.Savings, поскольку мне нужно 0 при суммировании, если есть Null, но когда я возвращаю v_row, если значение суммирования отображается как 0 тогда мне нужно взамен получить значение null или blank space, как мне это сделать.

Примечание: Я использую это для целей отчетности, и поэтому, если значение суммирования равно нулю, тогда в отчете должно быть пустое или пустое место.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

NULLIF (expr1, expr2) логически эквивалентно

CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END

NVL (expr1, expr2)

tot может быть NULL и v_row.SAVINGS может быть NULL.

  • Используйте NVL, чтобы убедиться, что число добавлено для возврата
  • Используйте NULLIF для возвратаNULL, если сумма равна NULL

Может быть более целесообразно принудительно привести значение NULL непосредственно перед возвратом.

Пример:

tot := NULLIF(NVL(tot, 0) + NVL(v_row.SAVINGS, 0), 0)
0 голосов
/ 27 апреля 2011

Это должно работать:

tot := case when tot + v_row.SAVINGS = 0 then null else tot + v_row.SAVINGS end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...