Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизВопрос по условным операторам в SQL Firebird 1.X Найти похожие ветки
← →
Rule © (2004-10-05 12:23) [0]Как мне сделать выбор по условию, щас попробую объяснить ...
допустим есть 2 поля
COUNT(numeric(12,3))
TTYPE(CHAR(1)) - принимает 2 значения "+" или "-"
так вот надо сделать запрос типа такого чтоб складывало количество если тип равен плюсу или вычитало если минусу, как такое сделать
ну если в цикле изобразить то получится
while not table1.eof do begin
if table.fields[1].asstring="+" then allcount:=allcount+table.fields[0].asinteger;
if table.fields[1].asstring="-" then allcount:=allcount-table.fields[0].asinteger;
table1.next;
end;
ну так я думаю будет понятно ?
← →
Sergey13 © (2004-10-05 12:26) [1]Вот если бы TTYPE был числом, и принимал значения 1 и -1 тогда...
← →
Johnmen © (2004-10-05 12:31) [2]
CASE WHEN ... THEN ... ELSE ... END
В доку смотри :)
← →
Rule © (2004-10-05 14:07) [3]Sergey13 © (05.10.04 12:26) [1]
А чего бы было, можно было бы умножить чтоли ?
Johnmen © (05.10.04 12:31) [2]
гут секс, только неужели можно эту структуру в запросе использовать
← →
Johnmen © (2004-10-05 14:09) [4]>Rule © (05.10.04 14:07) [3]
Конечно. Вместе с хорошим сексом...:)
← →
Rule © (2004-10-05 14:10) [5]Johnmen © (05.10.04 12:31) [2]
Не, этот вариант не подходит, так как это надо процедуру писать :(
← →
Johnmen © (2004-10-05 14:12) [6]>Rule © (05.10.04 14:10) [5]
Для чего процедуру ? Для секса или CASE ?
Для CASE точно не надо...:)
← →
Rule © (2004-10-05 14:13) [7]Johnmen © (05.10.04 14:09) [4]
Вот я и говорю что секс нужен :(, а я сегодня не активный в этом плане и вигра не поможет, проце тогда с помощью калкулейтид филдс сделать :)))
← →
Johnmen © (2004-10-05 14:15) [8]>проце тогда с помощью калкулейтид филдс сделать :)))
И нездорового секса здесь больше...:)
← →
Rule © (2004-10-05 14:39) [9]Johnmen © (05.10.04 14:15) [8]
Ух, а чегоже тогда посоветуете
← →
sniknik © (2004-10-05 15:02) [10]> Ух, а чегоже тогда посоветуете
того же самого
SELECT Sum(CASE WHEN TTYPE="+" THEN COUNT ELSE -COUNT END) AS allcount FROM table1
> [5]
непонятно почему не подходит...? или имелся ввиду секс? ;о))
← →
Johnmen © (2004-10-05 15:02) [11]
SELECT SUM((CASE TTYPE WHEN "+" THEN 1 WHEN "-" THEN -1 ELSE 0 END)*COUNT) FROM Table
Кстати, название поля COUNT обязательно !!! измени.
← →
sniknik © (2004-10-05 15:03) [12]пропустил, с полем COUNT так просто не получится, зарезервированное слово. (нада в скобочки, "" такие вроде там в FB)
← →
sniknik © (2004-10-05 15:04) [13];о)))
← →
Rule © (2004-10-05 15:06) [14]Johnmen © (05.10.04 15:02) [11]
да я ради примера привел, у меня то таблица другая, я просто идею так показал :)
← →
Rule © (2004-10-05 15:08) [15]sniknik © (05.10.04 15:02) [10]
Johnmen © (05.10.04 15:02) [11]
Елки палки, извините меня пожалуйста, надо по ночам спать а не вышеуказанными вещами заниматься :)))
мог бы и сам додуматся, не раз же делал :)))
Огромное спасибо всем присутствующим :)))
← →
sniknik © (2004-10-05 15:11) [16]зато всесело.
← →
sniknik © (2004-10-05 15:11) [17];о) еще более.
зато весело.
← →
jack128 © (2004-10-05 15:40) [18]веселая ветка.
Одно понятно - нафиг поле TType ??? Пусть поле Count будет знаковым и все дела..
Или дома в постеле секса не хватает - хочется еще на работе с SQL тр@№$ться?? ;-)
← →
Rule © (2004-10-05 15:48) [19]jack128 © (05.10.04 15:40) [18]
ЭЭЭЭЭЭЭЭЭЭЭЭЭ батенька, я задавался этим вопросом очень долго, но приходится писать прогрмму под существующую базу ...
← →
Rule © (2004-10-05 15:52) [20]Друзья, вы не поверите, но в интербейзе нет оператора CASE !!!!!!!!!!!!!!!!!!!!!
только что читал LanGRef так там даже ключевого слова такого нет, и кроме того ибэксперт не подсвечивает его как зарезервированое, вот это дела, и как теперь в одном запросе так сделать как с помощью CASE
← →
Sandman25 © (2004-10-05 15:55) [21][20] Rule © (05.10.04 15:52)
Поверим :)
udf писать
← →
Rule © (2004-10-05 15:56) [22]Sandman25 © (05.10.04 15:55) [21]
да ну ради одной реализации писать удф, нет уж извольте, лучше калькулейтид фидлс :(
← →
Sandman25 © (2004-10-05 15:58) [23]Нет, лучше переход на FB, или upgrade до IB6 (или 7, уже не помню)
← →
Rule © (2004-10-05 15:58) [24]а ещё проще хранимую процедуру написать да и все, и никаких удф не надо
← →
Sandman25 © (2004-10-05 15:59) [25]for select работает медленнее, чем select sum
← →
Rule © (2004-10-05 15:59) [26]Sandman25 © (05.10.04 15:58) [23]
так у меня и есть фаерберд 1.5, наверное это просто IBX вмесие с IBExpert не понимают эту структуру ...
← →
Sandman25 © (2004-10-05 16:02) [27][26] Rule © (05.10.04 15:59)
Понятно. Я не спец, сейчас может другие подскажут.
← →
Rule © (2004-10-05 16:03) [28]Sandman25 © (05.10.04 16:02) [27]
Да ждемс, может другие поставят
← →
Johnmen © (2004-10-05 16:04) [29]>Rule © (05.10.04 15:59) [26]
>так у меня и есть фаерберд 1.5,
Если FB1.5, то там есть CASE. В IB его нет...
← →
Роман Снегирев (2004-10-05 16:09) [30]так у меня и есть фаерберд 1.5, наверное это просто IBX вмесие с IBExpert не понимают эту структуру ...
IBExpert все отлично понимает, а IBX по х... что ты там пишещь в запросе, выполняет то его все равно сервер, так что все должно работать. А лучше переходи на FIBPlus
← →
Sergey13 © (2004-10-05 16:10) [31]22[26] Rule © (05.10.04 15:59)
У меня в эксперте на 1.5 запрос из [11] отработал на ура и с подсветкой. 8-)
← →
sniknik © (2004-10-05 16:13) [32]Rule © (05.10.04 15:59) [26]
> Sandman25 © (05.10.04 15:58) [23]
> так у меня и есть фаерберд 1.5, наверное это просто IBX вмесие с IBExpert не понимают эту структуру ...
сам фаерберд 1.5, должен... из доки
(1.5) New constructs for CASE expressions
Arno Brinkman
a) CASE
Allow the result of a column to be determined by the outcome of a group of exclusive conditions.
Syntax
<case expression> ::=
<case abbreviation> | <case specification>
<case abbreviation> ::=
NULLIF <left paren> <value expression> <comma> <value expression> <right paren>
| COALESCE <left paren> <value expression> { <comma> <value expression> }... <right paren>
<case specification> ::=
<simple case> | <searched case>
<simple case> ::=
CASE <value expression> <simple when clause>...
[ <else clause> ]
END
<searched case> ::=
CASE <searched when clause>...
[ <else clause> ]
END
<simple when clause> ::= WHEN <when operand> THEN <result>
<searched when clause> ::= WHEN <search condition> THEN <result>
<when operand> ::= <value expression>
<else clause> ::= ELSE <result>
<result> ::= <result expression> | NULL
<result expression> ::= <value expression>
Examples
i) simple
SELECT
o.ID,
o.Description,
CASE o.Status
WHEN 1 THEN "confirmed"
WHEN 2 THEN "in production"
WHEN 3 THEN "ready"
WHEN 4 THEN "shipped"
ELSE "unknown status """ || o.Status || """"
END
FROM Orders o;
ii) searched
SELECT
o.ID,
o.Description,
CASE
WHEN (o.Status IS NULL) THEN "new"
WHEN (o.Status = 1) THEN "confirmed"
WHEN (o.Status = 3) THEN "in production"
WHEN (o.Status = 4) THEN "ready"
WHEN (o.Status = 5) THEN "shipped"
ELSE "unknown status """ || o.Status || """"
END
FROM Orders o;
могу прислать прогу на ADO, на ней влегкую идет (вышеописанные запросы).
← →
Rule © (2004-10-05 16:17) [33]Rule © (05.10.04 16:03) [28]
вернее не поставят а подскажут, уже вообще засыпаю, даже слова путаю :))
← →
Rule © (2004-10-05 16:18) [34]sniknik © (05.10.04 16:13) [32]
Да верю, а какие компоненты доступа были использованы ?
← →
Rule © (2004-10-05 16:21) [35]Опа, я нашел в чем причина, у меня в трее висит фаерберд гуардиан 1.5, а вот в эксперте пишет что база 1.0, как мне её теперь перевести на 1.5 ?
Роман Снегирев (05.10.04 16:09) [30]
Извините, не я начальник информационного отдела, я бы давно перешел на них, но увы ... я много раз говорил
← →
Sergey13 © (2004-10-05 16:25) [36]2[35] Rule © (05.10.04 16:21)
>Опа, я нашел в чем причина, у меня в трее висит фаерберд гуардиан 1.5, а вот в эксперте пишет что база 1.0, как мне её теперь перевести на 1.5 ?
Попробуй поменять в "Регистрационной информации базы"
← →
sniknik © (2004-10-05 16:26) [37]> Да верю, а какие компоненты доступа были использованы ?
ADO (connect, command, dataset) провайдер ZStyle IBOLE Provider (5 бесплатная версия).
← →
Rule © (2004-10-05 16:27) [38]sniknik © (05.10.04 16:26) [37]
А можно сапросить, почему использованы Адошные компоненты доступа а не прямые, по каким соображениям ?
← →
Rule © (2004-10-05 16:30) [39]Все понял причину, извините, действительно тороможу, больше не буду сонный постить вопросы :)))
Причина в том что база лежит на другой машине, на сервере, а там фаерберд 1.0, вот так, вот сдесь все и причины :))
а на 1.5 менять не будут потомучто на тойже машине стоит клиент банк или какаято банковская программа ...
ну щас буду решать, надо же переходить на 1.5, щас будем банкиров с сервака сталкивать, ибо нефиг
← →
sniknik © (2004-10-05 16:41) [40]> А можно сапросить, почему использованы Адошные компоненты доступа а не прямые, по каким соображениям ?
сапросить мошно пуалуачить незя. ;о))
да просто прога писалась как тестилка sql запросов, именно для ADO, вернее для того чтобы ему обучится. (с чего то нужно начинать) в основном для баз acces (задумывалось), получилось для всех (ну я же не виноват что ADO практически все базы поддерживает ;о))
нашлись драйвера под IB вот и тестю на ней же. (привык уже, да и проше это, поменял провайдера, все другая база...)
← →
Rule © (2004-10-05 17:14) [41]sniknik © (05.10.04 16:41) [40]
Понятно, спасибо за информацию :)
← →
sniknik © (2004-10-05 17:39) [42]не, на самом деле можно "оправдать" выбор ADO, OLEDB, если например "вдруг" понадобится совместить IB c MSSQL.
вот почитай
http://zstyle.dp.ua/eng/iboledb_doc5.htm
← →
Rule © (2004-10-05 17:48) [43]sniknik © (05.10.04 17:39) [42]
гут, спасибо за ссылку, читаю ...
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.024 c