![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
А что если SUM(Table.Field) = null? [IB6.x]
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. Траблы уйдут в прошлое.