Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Вопрос по условным операторам в 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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.026 c
3-1096464925
Хома
2004-09-29 17:35
2004.10.31
Connect to Informix


14-1097236306
Alone
2004-10-08 15:51
2004.10.31
Компьютер-розетка :)


14-1097113974
Думкин
2004-10-07 05:52
2004.10.31
С днем рождения! 7 октября


14-1097740952
VAleksey
2004-10-14 12:02
2004.10.31
Стихи про Деда Мороза


3-1096994309
sh
2004-10-05 20:38
2004.10.31
Как получить сумму значений по диапазонам