-
Доброго времени суток! Помогите решить проблему, есть таблица TABLE1 VALUE_ TYPE_ 1 T1 2 T2 И запрос
select sum(value_)
-
(select sum(value_) from table1 where type_ = 'T3')
from table1 where (type_ = 'T1')or(type_ = 'T2')
Результат запроса - NULL, как сделать чтобы он был равен 3 ((1+2)-0)?
-
Нашел решение, select sum(value_) - COALESCE((select sum(value_) from table1 where type_ = 'T3'),0)
from table1 where (type_ = 'T1')or(type_ = 'T2')
всем спасибо
-
ISNULL?
-
Какой нафиг TSQL в FB??
-
> turbouser © (14.04.11 12:34) [3]
опшибся, сорри )
-
>DelphiN! (14.04.11 12:02) лучше за один проход:
select coalesce(
case t.type_
when 'T3' then - t.value_
else t.value_
end,
0
)
from table1 t where t.type_ in ('T1', 'T2', 'T3')
-
> TSQL вычитание NULLa [FireBird 2.1.1]
А где вычитание в приведеном коде
-
Поле, которому разрешено быть null, конечно может учавствовать в вычислениях. Но сам по себе null уже говорит о том что значения НЕТ, а если значения нет, то и результатов вычисления НЕТ. Или убирай null и заменяй по человечески нулем, или уж прими null в результатах.
-
добавить
where value_ is not null
-
добавь ISNULL перед операцией SUM. т.е.: select sum(ISNULL(value_ , 0))
-
(select sum(ISNULL(value_ , 0)) from table1 where type_ = 'T3')
from table1 where (type_ = 'T1')or(type_ = 'T2')
-
>shpigel © (19.04.11 18:26) [9] решение уже было дано но раз уж так неймется, то что будет, если этот запрос:
select sum(ISNULL(value_ , 0)) from table1 where type_ = 'T3'
возвращает 0 записей?
|