![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SUM -> NULL [D5, Paradox]
PKT © (2002-12-26 04:59:00)Запрос:
select SUM(CREDIT) - SUM(DEBET) from ...
Если у всех записей, например, поле DEBET пустое,
то на выходе вместо суммы CREDIT минус нульвозвращается
пустое значение.
Сейчас делаю отдельно запрос SUM(CREDIT), отдельно
SUM(DEBET), проверяю их на if not NULL и нахожу разницу.
А можно ли все-таки одним запросом ?
Lady D (2002-12-26 13:28:00) [21]
SELECT SUM(ALL CREDIT) - SUM(ALL DEBET) from ...
Подсчитает все NOT NULL
Anatoly Podgoretsky (2002-12-26 11:48:00) [22]Да нужен он нам, нам и без него хорошо :-)
MsGuns (2002-12-26 11:48:00) [23]В Local SQL, я думаю, работать будет.
К вопросу же о NULL. Уважая мастаков, не могу не отметить, что порою они бывают излишне категоричны. Что значит фраза
>Alexandr © (26.12.02 09:33)
Сначала навтыкаете null куда надо и ненадо, а потом думаете, что у вас null неправильно работает.
Вы его просто готовить не умеете. А коли не умеете, то и используйте лучше. Пока не поймете в нем необходимость.?
А если база уже есть, создана n лет назад, содержит полмиллиона записей и успешно юзается m-м кол-вом персонала ?
Искусство программирования заключается не только в том, как проектировать НОВЫЕ проекты, но и как выкручиваться в старых, не так ли ?
Johnmen (2002-12-26 11:38:00) [24]>Val © (26.12.02 11:29)
>подозреваю, что нигде.
Вот и у меня закрались подозрения...:)))
myor (2002-12-26 11:33:00) [25]а че это вы тут делаете, а?
автор вопроса уже давно упал с этой ветки!
Val (2002-12-26 11:29:00) [26]>Johnmen © (26.12.02 11:23)
Где работает ?
подозреваю, что нигде.
Johnmen (2002-12-26 11:23:00) [27]>diMAN © (26.12.02 10:53)
>Работает 100%.
Где работает ?
Anatoly Podgoretsky (2002-12-26 10:54:00) [28]-=Sergeante=- © (26.12.02 10:39)
По теории, может это поможет NULL <> NULL
diMAN (2002-12-26 10:53:00) [29]Вот, лови, я тоже как то столкнулся с этой проблемой и вывернулся следующим образом:
select SUM(CAST(""0""||CAST(CREDIT AS CHAR(30)) AS MONEY)) - SUM(CAST(""0""||CAST(DEBET AS CHAR(30)) AS MONEY)) from ...
Работает 100%. Почему именно так, думаю объяснять не стоит, разберёшся :))
-=Sergeante=- (2002-12-26 10:39:00) [30]Ну запинали. Тем не менее, что-то более-менее прояснилось. Вытираю сопли и иду читать теорию. Спасибо.
myor (2002-12-26 10:24:00) [31]нечего удивляться.
null<>0 и точка
null- это именно неопределенные данные (см. теорию рбд), и не нужно их использовать там, где можно (и нужно) использовать пустые данные, т. е. 0 для числовых полей и "" (пустую строку)- для строк.
Sergey13 (2002-12-26 09:50:00) [32]2-=Sergeante=- © (26.12.02 09:30)
>Если из числа вычитаем "пусто"...
NULL - это не "пусто", это именно х.з. сколько. 8-) И этим надо уметь пользоваться при проектировании базы. Например это незаменимо во всякого рода ID-шниках, где установить 0 (нуль) нельзя по правилам ссылочной целостности. А вот для вещественных атрибутов (цены, количества и т.д) нужно выставлять дефолтные значения для полей (0 например), тогда и проблем не будет. И производительность вырастет (часто).
Anatoly Podgoretsky (2002-12-26 09:50:00) [33]В данный момент надо сделать преаобразование полей из NULL и реструктиризация таблицы после этого, наложить ограничение, что бы больше такого не повторялось.
Johnmen (2002-12-26 09:44:00) [34]>-=Sergeante=- © (26.12.02 09:30)
Ты неправ ! Сушествует четкая и одназначная логика работы со значениями полей, в т.ч. и с NULL ("неопределенность"). см. Alexandr © (26.12.02 09:33).
От себя добавлю, что если поле предполагает над собой какие-то действия, то и значение его должно быть определено. А если ты его не определил - наличие провалов при проектировании БД.
neXt (2002-12-26 09:39:00) [35]а в MSSQL можно:
select isnull(SUM(CREDIT),0) - isnull(SUM(DEBET),0) from ...
Alexandr (2002-12-26 09:33:00) [36]null это не ноль. это НЕИЗВЕСТНО.
пример
2+х.з. сколько
чему равно? х.з. сколько.
В чем проблема?
Сначала навтыкаете null куда надо и ненадо, а потом думаете, что у вас null неправильно работает.
Вы его просто готовить не умеете. А коли не умеете, то и используйте лучше. Пока не поймете в нем необходимость.
-=Sergeante=- (2002-12-26 09:30:00) [37]Чесно говоря, мне тоже не понятна логика такого поведения...
Если из числа вычитаем "пусто", то очевидно и остаться какое-то число, но никак не "пусто".
Сколько раз уже натыкался на эту фичу, столько же раз недоумевал от такого поведения. А оборачивается это лишним кодингом проверок и сравниваний с NULL значениями и заменой оных на 0.
Бред. Если это не бред, то ткните меня носом в чём я не прав.
PKT (2002-12-26 07:58:00) [38]to: ЮЮ © (26.12.02 06:57)
Спасибо за однозначный ответ, ну тогда оставлю как есть.
REP (2002-12-26 07:16:00) [39]Замени в поле DEBET все значения с NULL на 0. В SQL, если попадается значение NULL в поле, то выражение тоже с ним возвращает NULL. NULL это не 0.
ЮЮ (2002-12-26 06:57:00) [40]Низзя