Конференция "Начинающим" » TSQL вычитание NULLa [FireBird 2.1.1]
 
  • DelphiN! (14.04.11 12:02) [0]
    Доброго времени суток!
    Помогите решить проблему, есть таблица
        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)?
  • DelphiN! (14.04.11 12:21) [1]
    Нашел решение,
    select sum(value_)
    -
    COALESCE((select sum(value_) from table1 where type_ = 'T3'),0)

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

    всем спасибо
  • Sergey13 © (14.04.11 12:22) [2]
    ISNULL?
  • turbouser © (14.04.11 12:34) [3]
    Какой нафиг TSQL в FB??
  • DelphiN! (14.04.11 12:37) [4]

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


    опшибся, сорри )
  • Кщд (15.04.11 06:32) [5]
    >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')

  • Anatoly Podgoretsky © (15.04.11 15:32) [6]

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

    А где вычитание в приведеном коде
  • Palladin © (15.04.11 15:49) [7]
    Поле, которому разрешено быть null, конечно может учавствовать в вычислениях. Но сам по себе null уже говорит о том что значения НЕТ, а если значения нет, то и результатов вычисления НЕТ. Или убирай null и заменяй по человечески нулем, или уж прими null  в результатах.
  • KSergey © (18.04.11 15:55) [8]
    добавить

    where value_ is not null
  • shpigel © (19.04.11 18:26) [9]
    добавь 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')

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

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

    возвращает 0 записей?
 
Конференция "Начинающим" » TSQL вычитание NULLa [FireBird 2.1.1]
Есть новые Нет новых   [134432   +18][b:0][p:0.001]