|
SQL: Не работает оператор CASE в условии (СУБД Firebird 2.5) | ☑ | ||
---|---|---|---|---|
0
zsergey
07.10.14
✎
12:16
|
Все привет! Давненько я сюда не захаживал! :) Господа, почему у меня не работает этот запрос в Firebird?
SELECT sale.name, sale.FACTPRICE, sale.FACTSUMMA FROM table1 AS Sale WHERE sale.datetime between ? and ? and CASE when sale.code=19 then sale.FACTSUMMA>100 else sale.FACTSUMMA>1000 end ORDER by sale.code, sale.datetime Ругается на выражение sale.FACTSUMMA>100. Аналогичный запрос успешно отрабатывает 1С. Может в огнептице такое нельзя делать? |
|||
1
MMF
07.10.14
✎
12:22
|
and sale.FACTSUMMA > iff(sale.code=19, 100, 1000)
|
|||
2
Ёпрст
07.10.14
✎
12:29
|
а так ?
sale.FACTSUMMA>(case when sale.code=19 then 100 else 1000 end) |
|||
3
zsergey
07.10.14
✎
12:41
|
(1,2) Оба вариантса работают, спасибо!. Идем теперь далее: мне нужно сделать динамическое условие
SELECT sale.name, sale.FACTPRICE, sale.FACTSUMMA FROM table1 AS Sale WHERE sale.datetime between ? and ? 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 ORDER by sale.code, sale.datetime |
|||
4
Ёпрст
07.10.14
✎
12:46
|
and sale.FACTSUMMA>( case when sale.code=4 then 100 else 0 end)
|
|||
5
zsergey
07.10.14
✎
12:55
|
о, спасибо!
И последний вопрос: 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 ORDER by sale.code, sale.datetime здесь так и охота написать: and sale.FACTSUMMA=(case when sale.code=4 then 100 else not null end) :)) |
|||
6
Ёпрст
07.10.14
✎
13:06
|
че за нот нулл у числа ?
|
|||
7
Ёпрст
07.10.14
✎
13:06
|
по русски, как условие выглядеть должно ?
|
|||
8
trad
07.10.14
✎
13:08
|
(7) если код=4, то фактсум надо проверить на равенство 100, иначе фактсцмм надо проверить на нотнул
так как то |
|||
9
Ёпрст
07.10.14
✎
13:20
|
(8) да ладно ?
:)) |
|||
10
Ёпрст
07.10.14
✎
13:21
|
как оно нот нулл будет в этом запросе? :)
|
|||
11
zsergey
07.10.14
✎
13:26
|
про not null это я образно.
Условие такое: если код=4, то "FACTSUMMA" надо проверить на равенство 100, иначе любое число. |
|||
12
MMF
07.10.14
✎
13:27
|
(7) страшно подумать, что автор пишет в 1с при таком построении условий. "Аналогичный запрос успешно отрабатывает 1С", ага, щас
|
|||
13
MMF
07.10.14
✎
13:28
|
(11) иначе любое число проверить на равенство 100? хых
|
|||
14
zsergey
07.10.14
✎
13:31
|
(12)
ВЫБРАТЬ ПеремещениеТоваровТовары.Ссылка, ПеремещениеТоваровТовары.Ссылка.ВидОперации ИЗ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары ГДЕ ПеремещениеТоваровТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон И ВЫБОР КОГДА ПеремещениеТоваровТовары.Ссылка.Проведен ТОГДА ПеремещениеТоваровТовары.Ссылка.ВидОперации = &ВидОперации ИНАЧЕ ПеремещениеТоваровТовары.Ссылка.ВидОперации = &ВидОперации1 КОНЕЦ в 1С это работает! Что-то подобное в Firebird нет! |
|||
15
zsergey
07.10.14
✎
13:37
|
(13) Если Код=4 тогда выбрать записи с ""FACTSUMMA"=100, при прочих кодах, выбрать всё (без условия с "FACTSUMMA"). Так понятно?
|
|||
16
zsergey
07.10.14
✎
13:41
|
т.е. так вот не прокатит:
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 |
|||
17
trad
07.10.14
✎
13:43
|
(15)
where Код!=4 or FACTSUMMA=100 |
|||
18
MMF
07.10.14
✎
13:45
|
WHERE
sale.datetime between ? and ? and ((sale.code in (1,3)) or ((sale.code = 4) and ( sale.FACTSUMMA=100))) |
|||
19
Ёпрст
07.10.14
✎
13:46
|
(16) and sale.FACTSUMMA = (case when sale.code=4 then 100 else sale.FACTSUMMA end)
|
|||
20
Ёпрст
07.10.14
✎
13:47
|
(17) зачет..
|
|||
21
Ёпрст
07.10.14
✎
13:49
|
а у меня чегой-то один кейс в башке.. :))
|
|||
22
trad
07.10.14
✎
13:51
|
(20) да, профессор
|
|||
23
Ёпрст
07.10.14
✎
13:52
|
(22) ну блин, с тобой на бентли не заработаешь ©
|
|||
24
zsergey
07.10.14
✎
13:54
|
(17, 18) СПАСИБО РЕБЯТА!
|
|||
25
zsergey
07.10.14
✎
13:55
|
(19 тоже СПАСИБО!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |