![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос для IB
Li © (2004-08-05 00:36:00)Пожалуйста, помогите, что здесь можно придумать?
Есть таблица Tab1(ID as Integer, Sum as Float, NDS as Char)
Необходимо выбрать для каждого ID значение суммы с НДС, т.е.
result = Sum*1.2, если NDS = 'y'
result = Sum, если NDS = 'n'
Сделать это нужно одним запросом Select и без изменения структуры таблицы.
Подскажите, пожалуйста, возможно ли это в IB.
Спасибо!
Rule (2004-08-05 11:15:00) [1]Li (05.08.04 10:48) [15]
Не понял, это как, в техзадании написано чтоб юнион не использвать или как?
чегто не понятно, огласите ваши требования и ися и версию сервера, если у вас есть желани чтоб мы вам помогли
Johnmen (2004-08-05 10:54:00) [2]>Li
1. Чем юнион не угодил ?
2. Может пора уже указать имя и версию сервера ?
Danilka (2004-08-05 10:52:00) [3]
> можно ли запрос БЕЗ union сделать?
в FB можно через CASE, в ИБ - незнаю можно или нет, но точно можно через хранимую процедуру.
Johnmen (2004-08-05 10:51:00) [4]>Rule © (05.08.04 10:34) [13]
>...зачем использовать первый диалект ...
Также можно спросить "Зачем использовать 3 диалект?"
В общем это философский вопрос. И обсуждать его можно долго и нудно. А не охота... В смысле, желания нет...:)
Li (2004-08-05 10:48:00) [5]по поводу Sum это понятно, просто для примера такое название.
можно ли запрос БЕЗ union сделать? такие уж требования :( ...
Danilka (2004-08-05 10:35:00) [6]НДС сейчас не 20, а 18%. А бывает еще и 10%.
И вообще, лучше НДС хранить в отдельном поле, дабы не отгрести проблем с округлениями.
:))
Rule (2004-08-05 10:34:00) [7]Johnmen © (05.08.04 10:30) [12]
А-а-а, вы про это, я уже обижатся начал, а разве есть целесообразность использовать первый диалект, может просветите меня (не учитывая конечно вариант с поддержкой существующей базы), а то лично мне не понятно зачем использовать первый диалект ...
Johnmen (2004-08-05 10:30:00) [8]>Rule © (05.08.04 10:28) [11]
Так я и не спорю. Работает. В 3 диале. А существует ещё и 1. :)
Rule (2004-08-05 10:28:00) [9]Rule © (05.08.04 10:20) [8]
НУ проверить что работает запрос приведенный в [7], если возникают подозрения указанные в [4]
Соловьев © (05.08.04 10:25) [10]
И не только, как представлено выше можно использовать в качестве названия полей зарезервированые слова (если разработчику базы так уж приспичило)
Соловьев (2004-08-05 10:25:00) [10]
> диалекте на двойные скобочки введены для значения полей
>
двойные кавычки для того чтобы можно было вводить названия полей разного регистра
Johnmen (2004-08-05 10:23:00) [11]>Rule © (05.08.04 10:20) [8]
>можешь проверить ...
Что проверить ?
Rule (2004-08-05 10:20:00) [12]Johnmen © (05.08.04 10:18) [6]
Ограничени в третем диалекте на двойные скобочки введены для значения полей а не для передачи названия поля, не веришь можешь проверить ...
Rule (2004-08-05 10:19:00) [13]Johnmen © (05.08.04 9:32) [4]
Небольшое дополненние:
select id,cast("SUM"*1.2 as Float) from lom where nds='y'
union
select id,"SUM" from lom where nds='n'
Вот так точно будет работать только надо следить чтобы регистр в названии поля "SUM" был правильный иначе не получится, несмотря даже на то что слово зарезервировано, будет работать обязательно
Johnmen (2004-08-05 10:18:00) [14]>Rule © (05.08.04 10:10) [5]
Потому, что у тебя 3 диалект.
Rule (2004-08-05 10:10:00) [15]Johnmen © (05.08.04 9:32) [4]
Почему, у меня работает, я сомневаюсь что интербейз в этом плане сильно отличается от фаерберда
Johnmen (2004-08-05 09:32:00) [16]>Rule © (05.08.04 09:30) [3]
"Это вряд ли." (c)
Rule (2004-08-05 09:30:00) [17]для облегчения можно сделать так:
select id,("sum"*1.2) from lom where nds='y'
union
select id,"sum" from lom where nds='n'
GanibalLector (2004-08-05 01:55:00) [18]select id,(sum_*1.2) from lom where nds='y'
union all
select id,(sum_*1) from lom where nds='n' order by 1;
GanibalLector (2004-08-05 01:41:00) [19]select id,(sum_*1.2) from lom where nds='y' ;
select id,sum_ from lom where nds='n' ;
и наконец UNION для обьединения
кстати,поле sum лучше измени.Это слово зарезервировано