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

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

TSQL вычитание NULLa [FireBird 2.1.1]


DelphiN! ©   (2011-04-14 12:02:00) 

Доброго времени суток!
Помогите решить проблему, есть таблица
    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)?


Кщд   (2011-04-25 07:12:00) [1]

>shpigel ©   (19.04.11 18:26) [9]
решение уже было дано
но раз уж так неймется, то что будет, если этот запрос:

select sum(ISNULL(value_ , 0)) from table1 where type_ = 'T3'

возвращает 0 записей?


shpigel   (2011-04-19 18:26:00) [2]

добавь 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')


KSergey   (2011-04-18 15:55:00) [3]

добавить

where value_ is not null


Palladin   (2011-04-15 15:49:00) [4]

Поле, которому разрешено быть null, конечно может учавствовать в вычислениях. Но сам по себе null уже говорит о том что значения НЕТ, а если значения нет, то и результатов вычисления НЕТ. Или убирай null и заменяй по человечески нулем, или уж прими null  в результатах.


Anatoly Podgoretsky   (2011-04-15 15:32:00) [5]


> TSQL вычитание NULLa [FireBird 2.1.1]

А где вычитание в приведеном коде


Кщд   (2011-04-15 06:32:00) [6]

>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')


DelphiN!   (2011-04-14 12:37:00) [7]


> turbouser ©   (14.04.11 12:34) [3]


опшибся, сорри )


turbouser   (2011-04-14 12:34:00) [8]

Какой нафиг TSQL в FB??


Sergey13   (2011-04-14 12:22:00) [9]

ISNULL?


DelphiN!   (2011-04-14 12:21:00) [10]

Нашел решение,
select sum(value_)
-
COALESCE((select sum(value_) from table1 where type_ = 'T3'),0)

from table1 where (type_ = 'T1')or(type_ = 'T2')

всем спасибо


Наверх

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