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

Откуда:
Сообщений: 17
Столкнулся с такой проблемой: во вложенном запросе возвращается таблица, в которую не должны попадать записи, имеющие значение ноль в одном из столбцов. В верхнем запросе имеется формула с делением на это поле. Но ошибка деления на ноль все равно возникает. Вот сам запрос:
create table #test (tovar int, kol numeric(18,3), cenazak numeric(18,2), cenaprod numeric(18,2))
insert into #test values(1,1,0.02, 0.02)
insert into #test values(2,1,0, 0)

select *
from 
	(select tovar, sum(kol*cenazak) summazak, sum(kol*cenaprod) summaprod
	from #test
	group by tovar
	having sum(kol*cenazak)<>0) z
where (summaprod-summazak)/summazak<0.3

Есть конечно вариант с использованием CASE в условии, но при этом варианте запрос выполняется уж очень долго.
23 июл 18, 11:16    [21593486]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Edward Mingaziev,

если не хотите резать условием,
NULLIF(summazak,0)
23 июл 18, 11:21    [21593512]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
invm
Member

Откуда: Москва
Сообщений: 9124
where summaprod - summazak < 0.3 * summazak
23 июл 18, 11:28    [21593539]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
Edward Mingaziev
Member

Откуда:
Сообщений: 17
TaPaK
Edward Mingaziev,

если не хотите резать условием,
NULLIF(summazak,0)


Спасибо, действительно помогло. Но не понимаю как.
23 июл 18, 11:29    [21593543]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Edward Mingaziev
TaPaK
Edward Mingaziev,

если не хотите резать условием,
NULLIF(summazak,0)


Спасибо, действительно помогло. Но не понимаю как.

summazak = 0 заменяется на NULL, на NULL делить можно.

Или как invm предлагает, вполне математичненько :)
23 июл 18, 11:39    [21593565]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
Edward Mingaziev
Member

Откуда:
Сообщений: 17
Но ведь нулевые значения должны были отфильтроваться еще во вложенном запросе. А они почему-то подвергаются проверке в основном запросе.
23 июл 18, 11:57    [21593638]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Edward Mingaziev
Но ведь нулевые значения должны были отфильтроваться еще во вложенном запросе. А они почему-то подвергаются проверке в основном запросе.

никому они не должны. Смотрите в план
23 июл 18, 11:58    [21593644]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
invm
where summaprod - summazak < 0.3 * summazak
where summaprod < 1.3 * summazak
23 июл 18, 12:08    [21593686]     Ответить | Цитировать Сообщить модератору
 Re: Деление на ноль, как избавиться?  [new]
aleks222
Member

Откуда:
Сообщений: 855
iap
invm
where summaprod - summazak < 0.3 * summazak
where summaprod < 1.3 * summazak

Ну не учил человек высшей математики.
Чо докапываться?
23 июл 18, 12:58    [21593914]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить