Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как лучше сделать?деление на ноль  [new]
denis_stell
Member

Откуда:
Сообщений: 255
Добрый день,
подскажите как лучше реализовать?
есть таблицы, где просчитаны данные,возвращаю селектом с объединением таблиц.
возникала необходимость высчитать факт. % ставку по счету.
формула такова:
(Расход/ср.остаток)*кол-во дней в году/количество дней в расчетном периоде.
если писать в лоб
select a.id,a.name,a.rest_avg,isnull(s.sum_rashod,0), (s.sum_rashod/a.rest_avg)*365/31  as stavka from b1 left join b2 on b1.id=b2.id_q .....

конечно же вываливается, что деление на ноль.
Как красиво обойти?
если просто,то
case a.rest_avg
 when 0 then 0
else
 (s.sum_rashod/a.rest_avg)*365/31 
29 авг 13, 11:21    [14769885]     Ответить | Цитировать Сообщить модератору
 Re: как лучше сделать?деление на ноль  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
denis_stell,
ISNULL(s.sum_rashod/NULLIF(a.rest_avg,0)*365/31,0)
29 авг 13, 11:25    [14769907]     Ответить | Цитировать Сообщить модератору
 Re: как лучше сделать?деление на ноль  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
denis_stell
Как красиво обойти?
если просто,то
case
Ну да, можно так, или можно через nullif:
s.sum_rashod/nullif(a.rest_avg, 0)

ИМХО это логически правильнее, потому что если rest_avg равен нулю, то результат деления на него не может быть равен нулю :-)
29 авг 13, 11:27    [14769923]     Ответить | Цитировать Сообщить модератору
 Re: как лучше сделать?деление на ноль  [new]
denis_stell
Member

Откуда:
Сообщений: 255
спасибо ребят...
точно совсем забыл за nullif()
29 авг 13, 11:29    [14769944]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить