Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > правильно написать запрос исключив деление на ноль


Автор: vanillavera 21.7.2010, 13:06
Всем здравствуйте!
подскажите, пожалуйста, кто знает, как правильно написать запрос?
нужно вывести поле наценка, как результат от деления (продажи-продажи в договорных ценах)/продажи в договорных ценах
проблема в том, что договорной цены может и не быть
как написать, чтобы в случае возникновения ошибки деления на ноль в поле выводился ноль?
изначально , скажем запрос такой

SELECT access.SUMPROD, access.SUMDOG, (SUMPROD-SUMDOG)/SUMDOG
FROM access access

теоретически понимаю, что здесь нужно использовать is null или case 

но как? мои познания в SQL скудны и поверхностны

Автор: Zloxa 21.7.2010, 13:33
Код

(SUMPROD-SUMDOG)/nullif(SUMDOG,0)

Код

case when SUMDOG <> 0 then (SUMPROD-SUMDOG)/SUMDOG end


Добавлено через 1 минуту и 58 секунд
Цитата(vanillavera @  21.7.2010,  13:06 Найти цитируемый пост)
выводился ноль?

Именно потому что неопределенные значения у Вас представлены нолями  а не null'ами вы и имеете эти гемморои.


Автор: vanillavera 21.7.2010, 14:24


SELECT access.SUMPROD, access.SUMDOG, 
case when isnull(SUMDOG;0)=0 then 0 else (SUMPROD-SUMDOG)/SUMDOG end
FROM access access


запрос пишу в MS Query
выдает
Не требовалось 'isnull' после списка столбцов в предложении SELECT

Автор: Zloxa 21.7.2010, 14:30
зачем тебе isnull? на null делить можно, нельзя на 0
просто сравнивай с нулем.

Автор: vanillavera 21.7.2010, 14:43
ваш вариант выдает
 не требовалось 'SUMDOG' после списка столбцов в предложении SELECT

Автор: Deniz 22.7.2010, 06:58
Цитата(Zloxa @  21.7.2010,  16:30 Найти цитируемый пост)
зачем тебе isnull?
ну как же, в поле может быть 0 или null, из описания 
Цитата(vanillavera @  21.7.2010,  15:06 Найти цитируемый пост)
договорной цены может и не быть
не понятно, что там хранится когда дог.цены нет.

vanillavera, так вроде все правильно, какая-то ошибка в синтаксисе.
Что за БД?
Попробуй условие обрамить скобками case when ( ... ) then ... else ... end

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)