|
Помогите обойти "Divide by zero error encountered" | ☑ | ||
---|---|---|---|---|
0
BigShmax
17.06.12
✎
13:17
|
строка запроса вызывающая ошибку :
| СУММА(МатериальныеЗатраты.Стоимость / ВложенныйЗапрос.Стоимость) КАК КоэффициентПоМатериальнымЗатратам, воткнул условие : | Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 Иначе СУММА(МатериальныеЗатраты.Стоимость / ВложенныйЗапрос.Стоимость) Конец КАК КоэффициентПоМатериальнымЗатратам, ошибка та же :( - чтобы убедиться что деление вывзывающее ошибку именно тут , воткнул : | 1 КАК КоэффициентПоМатериальнымЗатратам, и все считается :-(((( как корректно проверку поставить в этом делении? текст ошибки : Ошибка при выполнении операции над данными: Microsoft OLE DB Provider for SQL Server: Divide by zero error encountered. HRESULT=80040E14, SQLSrvr: SQLSTATE=22012, state=1, Severity=10, native=8134, line=1 |
|||
1
Torquader
17.06.12
✎
13:24
|
Есть мнение, что Null не равно 0.
|
|||
2
Steel_Wheel
17.06.12
✎
13:25
|
Есть мнение, что
ВложенныйЗапрос.Стоимость == 0 |
|||
3
BigShmax
17.06.12
✎
13:26
|
(2) а вот это
Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 что не проверяет ВложенныйЗапрос.Стоимость на равность нулю? |
|||
4
Steel_Wheel
17.06.12
✎
13:28
|
(3) Я бы попробовал обвернуть Вложенный запрос таким образом, чтобы от него брать не результат функции Сумма, а просто поле.
Трудно сказать, в чем именно ошибка, т.к. неясны условия соединения таблиц вложенного запроса и внешнего |
|||
5
Steel_Wheel
17.06.12
✎
13:31
|
Еще смотри, ты проверяешь на NULL и делишь 2 разные функции:
1) Твоя проверка ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) 2) а тут делишь СУММА(МатериальныеЗатраты.Стоимость / ВложенныйЗапрос.Стоимость) Сумма по полю ВложенныйЗапрос.Стоимость может быть ненулевой, а какая-то строка таблицы может иметь нули. Переделай выражение 2) как СУММА(МатериальныеЗатраты.Стоимость / СУММА(ВложенныйЗапрос.Стоимость) ) |
|||
6
BigShmax
17.06.12
✎
13:39
|
сейчас попробую :
| Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 Иначе СУММА(МатериальныеЗатраты.Стоимость / СУММА(ВложенныйЗапрос.Стоимость)) Конец КАК КоэффициентПоМатериальнымЗатратам, |
|||
7
BigShmax
17.06.12
✎
13:40
|
недопустимо использование вложенных агрегируюущих функций конструктор говорит :-(
|
|||
8
Rie
17.06.12
✎
13:43
|
(7) Смотря что тебе надо подсчитать, конечно...
Но можешь воткнуть ВЫБОР КОГДА ... = 0 ТО 0 ИНАЧЕ ... КОНЕЦ внутрь СУММА(). |
|||
9
Steel_Wheel
17.06.12
✎
13:52
|
Оберни свой вложенный запрос:
ВЫБРАТЬ ВложенныйЗапрос.Измерение1 Как ... ВложенныйЗапрос.Измерение2 Как Сумма(ISNULL(ВложенныйЗапрос.Стоимость, 0) ) Как Из ВложенныйЗапрос КАк ЗапросОбертка И не используй вложенные агрегирующие функции, а ссылайся на поля запроса-обертки |
|||
10
ptiz
17.06.12
✎
13:53
|
Скобки надо правильно расставлять
| Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 Иначе СУММА(МатериальныеЗатраты.Стоимость) / СУММА(ВложенныйЗапрос.Стоимость) Конец КАК КоэффициентПоМатериальнымЗатратам, |
|||
11
BigShmax
17.06.12
✎
13:56
|
(10) спасибо конструктор сожрал. ща запущу буду поглядеть что из этого выйдет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |