| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление 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 | ||||
Добавлено через 1 минуту и 58 секунд Именно потому что неопределенные значения у Вас представлены нолями а не 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 |
| ну как же, в поле может быть 0 или null, из описания не понятно, что там хранится когда дог.цены нет. vanillavera, так вроде все правильно, какая-то ошибка в синтаксисе. Что за БД? Попробуй условие обрамить скобками case when ( ... ) then ... else ... end |