![]() |
![]() |
![]() |
|
ЕСТЬNULL и СУММА | ☑ | ||
---|---|---|---|---|
0
НафНаф
18.12.09
✎
09:00
|
Есть ли разница между
ЕСТЬNULL(СУММА(Остаток),0) и СУММА(ЕСТЬNULL(Остаток,0)) если нет, то что лучше использовать? |
|||
1
ZanderZ
18.12.09
✎
09:01
|
сумма по null что даст ?!
|
|||
2
Ksandr
18.12.09
✎
09:02
|
Есть и лучше
СУММА(ЕСТЬNULL(Остаток,0)) |
|||
3
НафНаф
18.12.09
✎
09:04
|
(2) в чем разница?
|
|||
4
SoftIce
18.12.09
✎
09:08
|
а СУММА(Остаток) не выдаст ошибку, если Остаток - NULL
|
|||
5
SoftIce
18.12.09
✎
09:08
|
?
|
|||
6
eklmn
гуру
18.12.09
✎
09:12
|
ЕСТЬNULL(СУММА(Остаток),0) это не сработает ибо вывалиться на сумме если оно будет null
|
|||
7
НафНаф
18.12.09
✎
09:13
|
(6) у меня ошибки нет и разницы нет
|
|||
8
eklmn
гуру
18.12.09
✎
09:14
|
(7) ну и что из этого следует?
|
|||
9
eklmn
гуру
18.12.09
✎
09:15
|
сделай соединение с чем нибудь, чтобы Остаток был = null тогда посмотрим
|
|||
10
НафНаф
18.12.09
✎
09:15
|
(8) что на частном случае разницы нет
|
|||
11
НафНаф
18.12.09
✎
09:15
|
(9) там и так соединение, иначе откуда бы NULL появился?
|
|||
12
eklmn
гуру
18.12.09
✎
09:15
|
(10) это значит ты не догнал
|
|||
13
Ksandr
18.12.09
✎
09:15
|
null + 100 + 200 + 300 = null
ЕСТЬNULL(null, 0) + 100 + 200 + 300 = 600 |
|||
14
eklmn
гуру
18.12.09
✎
09:15
|
(11) а я откуда знаю появился он или нет
|
|||
15
НафНаф
18.12.09
✎
09:18
|
(13) это в обычном сложении, а в СУММА по другому
еще они мои ветки закрывают, фотка им не нравится, умники (( |
|||
16
Ksandr
18.12.09
✎
09:24
|
(15) Не нашел подтверждения или опровержения твоим словам.
При сложении и при объединении с null резуьтат null, а чем СУММА особенна не знаю |
|||
17
НафНаф
18.12.09
✎
09:27
|
(16) вот
ВЫБРАТЬ СУММА(Остаток) ИЗ (ВЫБРАТЬ NULL КАК Остаток ОБЪЕДИНИТЬ ВЫБРАТЬ 10) КАК Т |
|||
18
eklmn
гуру
18.12.09
✎
09:27
|
БУГАГАГА
|
|||
19
НафНаф
18.12.09
✎
09:37
|
(18) что ты хотел этим сказать?
|
|||
20
Rusel
18.12.09
✎
09:39
|
ВЫБРАТЬ СУММА(Остаток) ИЗ
(ВЫБРАТЬ NULL КАК Остаток ОБЪЕДИНИТЬ ВЫБРАТЬ NULL) КАК Т Возвращает NULL ВЫБРАТЬ СУММА(ЕСТЬNULL(Остаток, 0)) ИЗ (ВЫБРАТЬ NULL КАК Остаток ОБЪЕДИНИТЬ ВЫБРАТЬ NULL) КАК Т Возвращает 0 |
|||
21
SoftIce
18.12.09
✎
09:40
|
Для СУММА можно вообще на NULL не проверять, разве что только конечный результат (если все NULL, то и СУММА NULL будет)
Так что лучше ЕСТЬNULL(СУММА(Остаток),0) |
|||
22
SoftIce
18.12.09
✎
09:42
|
Запрос
ВЫБРАТЬ Т1.Текст1, СУММА(Т1.Остаток) ИЗ ( ВЫБРАТЬ "Товар1" КАК Текст1, 10 КАК Остаток ОБЪЕДИНИТЬ ВЫБРАТЬ "Товар1", NULL ОБЪЕДИНИТЬ ВЫБРАТЬ "Товар2", 30 ОБЪЕДИНИТЬ ВЫБРАТЬ "Товар2", NULL ) КАК Т1 СГРУППИРОВАТЬ ПО ТЕКСТ1 выдает таблицу из 2-х строк Товар1 10 Товар2 30 |
|||
23
НафНаф
18.12.09
✎
09:46
|
(20)(21)(22) СПАСИБО!!!!!
наконец то мне ответили |
|||
24
k23
18.12.09
✎
10:24
|
есть принципиальная разница между вариантами
первый - гарантированно вернёт 1 строку второй может и пустым оказаться. |
|||
25
hhhh
18.12.09
✎
11:04
|
(8) СУММА() на NULL не вывалится
|
|||
26
НафНаф
18.12.09
✎
11:12
|
(24) а пример можно?
|
|||
27
k23
18.12.09
✎
12:11
|
(26) что-то типа вот такого:
ВЫБРАТЬ Продажи1.Период, Продажи1.Сумма, Продажи2.Сумма ИЗ РегистрНакопления.Продажи КАК Продажи1 ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЕСТЬNULL(СУММА(Сумма),0) КАК Сумма //СУММА(ЕСТЬNULL(Сумма,0)) КАК Сумма ИЗ РегистрНакопления.Продажи ГДЕ Период < 0 ) КАК Продажи2 ПО ИСТИНА ГДЕ Продажи2.Сумма = 0 |
|||
28
denis_jj
22.12.09
✎
22:47
|
Разница существенная и приводит к ошибкам, которые тяжело отлавливаются.
ЕСТЬNULL(СУММА(Остаток),0) в случае если в остатке встречается NULL ошибки при выполнениии запроса не возникает, но суммирует все значения до первого встречающегося NULL, остальные отбрасывает. т.е. Сумма(10,10,NULL,10) будет равна 20! (не 30!!!). Поэтому всегда нужно использовать СУММА(ЕСТЬNULL(Остаток,0)) |
|||
29
Киборг
22.12.09
✎
23:38
|
(28) это не так
Сумма(10,10,NULL,10)=30 Сумма(NULL,NULL,NULL,NULL)=NULL |
|||
30
denis_jj
26.12.09
✎
12:29
|
(29) Вы правы. Я ошибся.
По своему опыту могу сказать, что всегда стараюсь использовать ЕСТЬNULL() до применения агрегатных функций, т.к. в сложных вложенных в несколько уровней запросах после отработки группировок на нескольких уровнях результаты вычислений могут менятся в зависимости от замены NULL. Отлаживать такие ошибки достаточно сложно - приходится разбирать запросы по уровням. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |