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

Откуда:
Сообщений: 1086
Отчет в хранимке
падает если раскоментить хотя-бы одну (любую) из строк
;with cte as
(
select 1 totals
		
	
		,1 k36 --f1/nullif(0,f5) k36
		,1 k35 --in_wei/nullif(0,to_wei) k35
		,1 k33-- (fc.f1/nullif(0,fc.f5))*(in_wei/nullif(0,to_wei))*(SUM(outw) over (partition by [code],[stuff],[integrity],class))/nullif(0,(inq*(f7/nullif(f8,0)))) k33
		,1 k34--(SUM(outw) over (partition by [code],[stuff],[integrity],class))/nullif(0,inw) k34
			
 from DataSource

DataSource - большой подзапрос, в котором гарантированно нет делений
9 окт 14, 15:22    [16682476]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Glory
Member

Откуда:
Сообщений: 104760
А DataSource тоже наверное не таблица а запрос ?
9 окт 14, 15:24    [16682490]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
я ж написал, да подзапрос
9 окт 14, 15:30    [16682523]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
f1/nullif(0,f5)


что-то сомнительное использование nullif, подумайте зачем так написано
9 окт 14, 15:36    [16682555]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
Comparing NULLIF and CASE
To show the similarity between NULLIF and CASE, the following queries evaluate whether the values in the MakeFlag and FinishedGoodsFlag columns are the same. The first query uses NULLIF. The second query uses the CASE expression.

USE AdventureWorks2008R2;
GO
SELECT ProductID, MakeFlag, FinishedGoodsFlag, 
   NULLIF(MakeFlag,FinishedGoodsFlag)AS 'Null if Equal'
FROM Production.Product
WHERE ProductID < 10;
GO

SELECT ProductID, MakeFlag, FinishedGoodsFlag,'Null if Equal' =
   CASE
       WHEN MakeFlag = FinishedGoodsFlag THEN NULL
       ELSE MakeFlag
   END
FROM Production.Product
WHERE ProductID < 10;
GO
9 окт 14, 15:37    [16682565]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
бред какой-то, убрал nullif - заработал (на ранних периодах)
9 окт 14, 15:37    [16682568]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Konst_One,
nullif пользовал для проверки деления на ноль. case - не захотелось
9 окт 14, 15:39    [16682580]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Glory
Member

Откуда:
Сообщений: 104760
waszkiewicz
nullif пользовал для проверки деления на ноль. case - не захотелось

Сюрприз!
select nullif(0,NULL)
9 окт 14, 15:41    [16682595]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вот так надо писать
nullif(f5,0)
9 окт 14, 15:45    [16682616]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Glory,
мда. спасибо. все объясняет
9 окт 14, 15:47    [16682631]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
автор
Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"


а как же ваша фраза? получается что у вас никогда не работало!
9 окт 14, 15:49    [16682640]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Glory
Member

Откуда:
Сообщений: 104760
Konst_One
автор
Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"


а как же ваша фраза? получается что у вас никогда не работало!

Работало, пока NULL-ы не попадали
9 окт 14, 15:49    [16682647]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Glory
Вот так надо писать
nullif(f5,0)

f5 может быть null
9 окт 14, 15:50    [16682652]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Glory
Member

Откуда:
Сообщений: 104760
waszkiewicz
Glory
Вот так надо писать
nullif(f5,0)

f5 может быть null

Сюрприз номер два
select nullif(0,NULL), nullif(cast(NULL as int),0)
9 окт 14, 15:52    [16682661]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
waszkiewicz
Glory
Вот так надо писать
nullif(f5,0)

f5 может быть null


NULLIF(ISNULL(f5,0),0)
9 окт 14, 15:53    [16682669]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
мне всё равно непонятен ваш подход

declare @f5 int

set @f5 = null;
select 1/nullif(@f5,0)

select 1/nullif(0, @f5)

set @f5 = 0;
select 1/nullif(@f5,0)

select 1/nullif(0, @f5)


set @f5 = 1;

select 1/nullif(@f5,0)

select 1/nullif(0, @f5)
9 окт 14, 15:54    [16682678]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
я вышел по другому - применил nullif в подзапросе на знаменатели
9 окт 14, 15:55    [16682684]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Konst_One
мне всё равно непонятен ваш подход

declare @f5 int

set @f5 = null;
select 1/nullif(@f5,0)

select 1/nullif(0, @f5)

set @f5 = 0;
select 1/nullif(@f5,0)

select 1/nullif(0, @f5)


set @f5 = 1;

select 1/nullif(@f5,0)

select 1/nullif(0, @f5)


об этом GLORY говорил в самом начале
9 окт 14, 15:59    [16682705]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
апну.
Есть сильное подозрение что f1/f5 (где f1 и f5 вычисляются в подзапросе, как агрегаты) сервер считает также в подзапросе, и по-этому f1/nullif(f5,0) валится, ибо f5 может быть null
Зря подозреваю?
9 окт 14, 17:29    [16683360]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
waszkiewicz
по-этому f1/nullif(f5,0) валится, ибо f5 может быть null


я вам написал выше

f1/NULLIF(ISNULL(f5,0),0)
9 окт 14, 18:06    [16683579]     Ответить | Цитировать Сообщить модератору
 Re: Рабочий отчет внезапно стал падать с ошибкой "Деление на ноль"  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
a_voronin
waszkiewicz
по-этому f1/nullif(f5,0) валится, ибо f5 может быть null


я вам написал выше

f1/NULLIF(ISNULL(f5,0),0)

лечить нужно зуб, а не успокавать боль. Я не про это спрашивал. Возможно, оптимизатору все равно, откастую я исходные данные, или буду преобразовывать указанным способом.
9 окт 14, 18:27    [16683672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить