2016-11-04 2 views
1

Я продолжаю делиться нулевыми ошибками. Я прочитал несколько ответов здесь, но, возможно, я использую это неправильно. Любая помощь приветствуется.Divide by Zero issues

Посмотрите, что я в настоящее время здесь:

,cast(round((((Select JCCM.ContractAmt) 
    - 
((Select (sum (JCCP.CurrEstCost)) 
    From JCCP 
    Where JCCP.Job = JCCM.Contract))) 
    /
(Select JCCM.ContractAmt) *100),2) as numeric (36,2)) as 'Estimated Gross Profit (Loss) %' 

СПАСИБО!

+0

Какой результат вы хотите, чтобы отправить обратно в случае, если знаменатель были гипотетически нулю? –

+0

Подтвердите, что 'JCCM.ContractAmt' - все ненулевые значения, или' ISNULL' в знаменателе. –

+0

Тим, если значение равно 0, верните '-' или 0% Руди, не все равны нулю, только некоторые из них - – marizolclark

ответ

0

Убедитесь, что JCCM.ContractAmt все ненулевые значения

или сделать ISNULL на знаменатель

или добавить это в WHERE; либо ISNULL или JCCM.ContractAmt > 0

+1

Так глупо. Я никогда не думал о том, где предложение> 0. БЛАГОДАРЯ! Это сработало. Но я бы хотел, чтобы он показывал, даже если 0. Как я правильно поместил isnull? – marizolclark

+0

Рад, что это помогло :) –

0

Я думаю JCCM.ContractAmt это сумма контракта, поэтому, если сумма контракта составляет 0 тогда как «Оценочная Валовая прибыль (убыток)%» должен быть равен нулю (при условии, что компания не имеет никакого CurrEstCost до того, Сумма контракта).

Таким образом, можно обернуть это в случае заявления, как это:

, CASE ISNULL(JCCM.ContractAmt,0)=0 THEN 0 
     ELSE 
     cast(round((((Select JCCM.ContractAmt) 
     - 
     ((Select (sum (JCCP.CurrEstCost)) 
     From JCCP 
     Where JCCP.Job = JCCM.Contract))) 
     /
     (Select JCCM.ContractAmt) *100),2) as numeric (36,2)) 
    END 
as 'Estimated Gross Profit (Loss) %' 
Смежные вопросы