Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SUM -> NULL [D5, Paradox]


Страницы:   1 2

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]

Низзя


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо