2013-11-13 3 views
0

Я пытался сделать вычисление в SQL, но проблема заключается в том, что иногда есть вероятность, что одно из чисел может быть 0, что, конечно же, вызовет ошибку SQL Server. Я попытался изменить свой оператор case с нуля на 0, но при этом вызвали ложные данные для других элементов. Что я должен сделать в этом сценарии, чтобы точно вычислить возврат, и если он вернет ошибку деления на 0, верните 0?Избегайте деления на 0 Ошибка

Select product, 
count(distinct case when numavaliable is null then ID else null end), 
count(distinct product), 
count(distinct case when numavaliable is null then ID else null end)/count(distinct  product) 
From ProductionInfo 
Group By product 
+2

Если группировка по 'product' и подсчета отчетливое' product' на каждую группу, которая всегда будет 1, если «продукт» не равен нулю. Вопрос в том, почему вы хотите разделить это значение? –

+0

У меня должно быть заявление Group By, иначе он будет ошибкой. Я согласен с вашим заявлением, что всегда будет 1, поскольку это еще одна проблема, с которой я столкнулся. – MasterOfStupidQuestions

+0

Возможно, вам не нужен 'отдельный' для этого конкретного' count'. –

ответ

4

Использование NULLIF и ISNULL функции.

Select product, 
count(distinct case when numavaliable is null then ID else null end), 
count(distinct product), 
ISNULL (count(distinct case when numavaliable is null then ID else null end)/NULLIF(count(distinct  product), 0), 0) 
From ProductionInfo 
Group By product 
+0

Идеальное решение, спасибо! Я буду отмечать как ответ, когда мой таймер (я считаю, что осталось 8 минут) истекает. Еще раз спасибо! – MasterOfStupidQuestions

-2

Вы можете использовать IF на колонке, чтобы проверить, если это 0.

SELECT IF(y = 0, 'NaN', x/y) FROM YOURTABLE; 
+0

В SQL Server 2012 есть 'IIF' (не' IF'), но это должно быть 'NULL' не' 'NaN'', поскольку это приведет к отказу от числительного. –

Смежные вопросы