Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 вот и тестю на ней же. (привык уже, да и проше это, поменял провайдера, все другая база...)



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.035 c
1-1098166443
jenbond
2004-10-19 10:14
2004.10.31
подсветку подставленных переменных в FastReport


1-1097814277
yurai
2004-10-15 08:24
2004.10.31
Не могу поменять стандартную иконку Delphi в программе


14-1097675011
matt
2004-10-13 17:43
2004.10.31
Программирование микрокроцессоров


1-1097584420
Aleksandr.
2004-10-12 16:33
2004.10.31
Что случилось с Excel.Application?


3-1096879409
Lansky
2004-10-04 12:43
2004.10.31
Запись из одной таблицы в другую





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский