Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильно написать запрос исключив деление на ноль 
:(
    Опции темы
vanillavera
  Дата 21.7.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.7.2010

Репутация: нет
Всего: нет



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

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

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

но как? мои познания в SQL скудны и поверхностны
PM MAIL   Вверх
Zloxa
Дата 21.7.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Код

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

Код

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


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

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




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
vanillavera
  Дата 21.7.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.7.2010

Репутация: нет
Всего: нет





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

PM MAIL   Вверх
Zloxa
Дата 21.7.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



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

Это сообщение отредактировал(а) Zloxa - 21.7.2010, 14:31


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
vanillavera
  Дата 21.7.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.7.2010

Репутация: нет
Всего: нет



ваш вариант выдает
 не требовалось 'SUMDOG' после списка столбцов в предложении SELECT
PM MAIL   Вверх
Deniz
Дата 22.7.2010, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



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

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


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.