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

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

А что если SUM(Table.Field) = null? [IB6.x]


Страницы:   1 2

KIR ©   (2003-10-14 11:48:00) 

Народ, ситуация следующая: требуется сделать так:

SELECT
SUM(TABLE1.FIELD)+SUM(TABLE2.FIELD) AS TOTALSUM
FROM
TABLE1 LEFT OUTER JOIN TABLE2
ON TABLE1.ID = TABLE2.TABLE1ID

В некоторых строках получается, что SUM(TABLE2.FIELD) = NULL, тогда и SUM(TABLE1.FIELD)+SUM(TABLE2.FIELD)тоже получается равной null, а надо чтоб было SUM(TABLE1.FIELD). Причем, если сделать так:

SELECT
SUM(TABLE1.FIELD) AS SUM1,
SUM(TABLE2.FIELD) AS SUM2
FROM
TABLE1 LEFT OUTER JOIN TABLE2
ON TABLE1.ID = TABLE2.TABLE1ID

то все нормально, но два поля, а нодо все в одно...


Val   (2003-10-14 12:18:00) [21]

>KIR © (14.10.03 12:08) [6]
см.Johnmen © (14.10.03 12:03) [5] п.1.


Johnmen   (2003-10-14 12:18:00) [22]

[5]


KIR   (2003-10-14 12:08:00) [23]

>Sergey13 © (14.10.03 11:53) [1]
Если Вы внимательно прочтете запрос, то увидите, что SUM(TABLE2.FIELD)является NULLв том случае, если нет ни одной записи в TABLE2соответствующей определенной записи в TABLE1. Какой тут может быть NOT NULL и дефолтом 0, если поле вычисляется в прцессе выполнения запроса...


Johnmen   (2003-10-14 12:03:00) [24]

Даже если и сделать поля дефолтно = 0, может быть ситуация, когда SUM по присоединяемой с правого бока табл. (см.запрос) будет NULL.
1. Использовать UDF
2. Суммировать SUM1+SUM2 в приложении...


DenK_vrtz   (2003-10-14 11:57:00) [25]

либо делать преобразование неопределенного значеня, но лучше делать как советуют Sergey13 © и Danilka ©


Shura   (2003-10-14 11:56:00) [26]

Операции с Null в итоге дают Null.
Например, в Oracle есть функция NVL(x, y) - возвращает Х, если Х<>Null, иначе Y. В данном случае надо
NVL(SUM(TABLE1.FIELD), 0)+NVL(SUM(TABLE2.FIELD), 0) as TotalSum.
Аналог в IB не знаю, не пользовался :(, но смысл такой. Конвертация Null в 0 нужна.


Danilka   (2003-10-14 11:54:00) [27]

в дополнение к: [1] Sergey13 © (14.10.03 11:53)
причем, это никогда не поздно исправить.


Sergey13   (2003-10-14 11:53:00) [28]

Правильнее на такие поля ставить NOT NULL и дефолтом присваивать 0. Траблы уйдут в прошлое.


Страницы:   1 2

Наверх

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