SQL: Не работает оператор CASE в условии (СУБД Firebird 2.5) #722227


#0 by zsergey
Все привет! Давненько я сюда не захаживал! :) Господа, почему у меня не работает этот запрос в Firebird?     FROM         table1 AS Sale     WHERE         and             CASE when sale.code=19 then                 sale.FACTSUMMA>100             else             end Ругается на выражение sale.FACTSUMMA>100. Аналогичный запрос успешно отрабатывает 1С. Может в огнептице такое нельзя делать?
#1 by MMF
and sale.FACTSUMMA > iff(sale.code=19, 100, 1000)
#2 by Ёпрст
а так ? sale.FACTSUMMA>(case when sale.code=19 then 100 else 1000 end)
#3 by zsergey
(1,2) Оба вариантса работают, спасибо!. Идем теперь далее: мне нужно сделать динамическое условие     FROM         table1 AS Sale     WHERE         and sale.code in (1,3,4)        но когда sale.code=4 тогда sale.FACTSUMMA>100 иначе все значения из "FACTSUMMA" я пробовал так - не работает: SELECT         sale.name,         sale.FACTPRICE,         sale.FACTSUMMA     FROM         table1 AS Sale     WHERE         sale.datetime between ? and ?         and sale.code in (1,3,4)         and           case             when sale.code=4 then              sale.FACTSUMMA>100           end
#4 by Ёпрст
and  sale.FACTSUMMA>( case when sale.code=4 then 100 else 0 end)
#5 by zsergey
о, спасибо! И последний вопрос: SELECT         sale.name,         sale.FACTPRICE,         sale.FACTSUMMA     FROM         table1 AS Sale     WHERE         sale.datetime between ? and ?         and sale.code in (1,3,4)         and           case             when sale.code=4 then здесь так и охота написать: and  sale.FACTSUMMA=(case when sale.code=4 then 100 else not null end) :))
#6 by Ёпрст
че за нот нулл у числа ?
#7 by Ёпрст
по русски, как условие выглядеть должно  ?
#8 by trad
если код=4, то фактсум надо проверить на равенство 100, иначе фактсцмм надо проверить на нотнул так как то
#9 by Ёпрст
да ладно ? :))
#10 by Ёпрст
как оно нот нулл будет в этом запросе? :)
#11 by zsergey
про not null это я образно. Условие такое: если код=4, то "FACTSUMMA" надо проверить на равенство 100, иначе любое число.
#12 by MMF
страшно подумать, что автор пишет в 1с при таком построении условий. "Аналогичный запрос успешно отрабатывает 1С", ага, щас
#13 by MMF
иначе любое число проверить на равенство 100? хых
#14 by zsergey
ВЫБРАТЬ     Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары ГДЕ     ПеремещениеТоваровТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон в 1С это работает! Что-то подобное в Firebird нет!
#15 by zsergey
Если Код=4 тогда выбрать записи с ""FACTSUMMA"=100, при прочих кодах, выбрать всё (без условия с "FACTSUMMA"). Так понятно?
#16 by zsergey
т.е. так вот не прокатит:         sale.name,     FROM         table1 AS Sale     WHERE        and case              when sale.code=4 then                sale.FACTSUMMA=100            end
#17 by trad
where Код!=4 or FACTSUMMA=100
#18 by MMF
WHERE
#19 by Ёпрст
and sale.FACTSUMMA = (case when sale.code=4 then 100 else sale.FACTSUMMA end)
#20 by Ёпрст
зачет..
#21 by Ёпрст
а у меня чегой-то один кейс в башке.. :))
#22 by trad
да, профессор
#23 by Ёпрст
ну блин, с тобой на бентли не заработаешь ©
#24 by zsergey
(17, 18) СПАСИБО РЕБЯТА!
#25 by zsergey
(19  тоже СПАСИБО!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С