Есть большой запрос, где много временных таблиц. В одном месте запроса я соединяю одну таблицу с двумя другими левым соединением. В обеих таблицах можно нарваться на значения типа NULL, поэтому поле у меня пишется так:
ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток, 0) > ЕСТЬNULL(ДополнительныеРеквизитыМинимальныйОстаток.Значение, 0)
ТОГДА ЕСТЬNULL(ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток, 0) -
ЕСТЬNULL(ДополнительныеРеквизитыМинимальныйОстаток.Значение, 0)
ИНАЧЕ 0 КОНЕЦ КАК Остаток
Пишет ошибку "Неверные параметры "-"".
Меняю этот код на совсем уж "извращенный":
ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток, 0) >
ЕСТЬNULL(ДополнительныеРеквизитыМинимальныйОстаток.Значение, 0)
ТОГДА (ВЫБОР КОГДА ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток ЕСТЬ NULL
ТОГДА 0 ИНАЧЕ ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток КОНЕЦ)
- (ВЫБОР КОГДА ДополнительныеРеквизитыМинимальныйОстаток.Значение ЕСТЬ NULL
ТОГДА 0 ИНАЧЕ ДополнительныеРеквизитыМинимальныйОстаток.Значение КОНЕЦ)
ИНАЧЕ 0 КОНЕЦ КАК Остаток
но ошибка такая же.
Почему у меня не получается вычесть одно поле (число, а если NULL, то 0) из другого (тоже число)?
(1) Уже нашел в инете, но все равно огромное спасибо!
ВЫРАЗИТЬ(ЕСТЬNULL(ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток, 0) КАК ЧИСЛО(15,2)) - ВЫРАЗИТЬ(ЕСТЬNULL(ДополнительныеРеквизитыМинимальныйОстаток.Значение, 0) КАК ЧИСЛО(15,2)) -
это РАБОТАЕТ!!!
Но что интересно, почему же он тогда не выдает ошибку на сравнении:
ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаСвободныеОстатки.КоличествоОстаток, 0) > ЕСТЬNULL(ДополнительныеРеквизитыМинимальныйОстаток.Значение, 0) ?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший