У меня с этим проблемы. Мне нужна формула, которая даст мне фактический результат независимо от того, являются ли значения NULL и/или 0. См. следующее;
SELECT
[...columns...],
(NVL(SUM(table1.qty_rtnd), 0) + NVL(SUM(table1.qty_defective), 0)) / CASE (NVL(table1.sales, 0)) WHEN 0 THEN 1 END AS six_wk_pct_defective,
[...more columns...]
Значения в этом конкретном случае:
table1.qty_rtnd = NULL
table1.qty_defective = 7
table1.sales = 560
Если оператора CASE нет в этой формуле, а делитель равен 0, Oracle SQL Developer возвращает мне сообщение об ошибке, говорящее, что я не могу делить на ноль. Это нормально, но когда я пытаюсь применить оператор CASE к части дивиденда этой формулы, поле в результате запроса имеет значение NULL, хотя оно не должно быть (в этом конкретном случае математика делает это должно быть 0,0125) .
Что я делаю не так? Как я могу использовать CASE, NVL, DECODE или любые другие функции, чтобы решить эту проблему?
Спасибо,
-Муравей
ОБНОВИТЬ:
Для тех, кто ищет ответ. Один был предоставлен кем-то следующим;
SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (NULLIF (sales, 0), 1) FROM table1
CASE
. Еслиtable1.sales
равно 560, не было бы причин для того, чтобы знаменатель был равен 0, и, следовательно, не было бы причин для возникновения ошибки деления на 0. Кроме того, если у вас есть одиночные значения, нет никаких причин использовать функциюSUM
в вашем знаменателе. - person Justin Cave   schedule 11.06.2014