SQL DB2 нулевой расчет вызывает проблемы - PullRequest
1 голос
/ 14 апреля 2011

У меня есть следующий SQL:

Select dmvndn "Vendor Number", IFNULL(sum(dmsls) / sum(dmprc), 0) "Calculation"
From MyFile
Group By dmvndn

Однако, когда я запускаю это, я все еще получаю нулевые записи в моем поле «Вычисление».

Я также попробовал функцию COALESCE, которая возвращает те же результаты. Я получаю некоторые записи как 0, а некоторые записи пустые (или ноль).

Оба поля имеют тип P, который, как мне говорят, упакован числовым.

какие-либо идеи или предложения?

Редактировать 1 Кажется, проблема не в том, что какое-либо из этих полей имеет значение NULL, а в том, что одно или оба поля равны 0. И когда я делю на ноль, я получаю пустой / пустой результат.

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Попробуйте

Sum(IFNULL(dmsls,0)) / Sum(IFNULL(dmprc,0))
0 голосов
/ 14 апреля 2011

Такая хитрость помогает мне в MS SQL Server:

Select
  dmvndn "Vendor Number",
  IFNULL(sum(dmsls) / NULLIF(sum(dmprc), 0), 0) "Calculation"
From MyFile
Group By dmvndn

Интересно, не поможет ли это вам в DB2.

ОБНОВЛЕНИЕ: объяснение.

По сути, он заменяет делитель на NULL, если он равен 0. И вы, возможно, знаете, что, когда хотя бы один из операндов имеет значение NULL, результатом операции также становится NULL.

Чтобы учесть, что результат равен NULL, у вас уже есть IFNULL для результата. Это не имело большого значения тогда , потому что ни один из операндов, вероятно, не был НЕДЕЙСТВИТЕЛЕН. Однако теперь использование IFNULL имеет смысл.

...