Как вернуть значение, используя CASE, DECODE и / или NVL

У меня есть проблемы с этим. Мне нужна формула, которая даст мне реальный результат независимо от того, являются ли значения 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

2 ответа

Решение

Как насчет

SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (sales, 1) FROM table1

или же

SELECT (NVL (qty_rtnd, 0) + NVL (qty_defective, 0)) / NVL (NULLIF (sales, 0), 1) FROM table1

для защиты продаж =0

Довольно сложно понять, что вы спрашиваете здесь, так как вы не предоставили нам контрольный пример. Например, вы не сказали нам, какие значения имеют различные столбцы. Вы сказали нам, что, по-видимому, желаемый результат равен 0,0125, но, не зная, какие данные мы должны использовать, мы немного слепы.

Если единственной проблемой является ваш знаменатель, я подозреваю, что вы хотите, чтобы знаменатель был

CASE WHEN NVL( table1.sales, 0 ) = 0
     THEN 1
     ELSE table1.sales
 END

Если это предположение неверно, пожалуйста, помогите нам, опубликовав воспроизводимый контрольный пример.

Другие вопросы по тегам