Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вопрос по SQL [D5]


dr ©   (2002-03-21 16:35:00) 

Как в SQL в бд записать одно из нескольких значений в зависимости от значения другого поля. Что-то вроде
update db
set field2 (if field1 = "1" then "one")


DiggerAbstract   (2002-03-22 14:06:00) [1]

update table set
field1=(case when field1<10
then 0
else 100
end)
where ....


Val   (2002-03-22 13:52:00) [2]

>dr
делайте обычный динамический запрос с параметрами, а case используйте паскалевский


Val   (2002-03-22 13:50:00) [3]

>DiggerAbstract (22.03.02 04:38)
это что, запрос для Dbase?


DiggerAbstract   (2002-03-22 13:39:00) [4]

пардон - а оператор WHEN тебе не нужен?


dr   (2002-03-22 10:58:00) [5]

Никак не получается заставить работать этот запрос.
далаю примерно так:
update db
set
field2 = case (field1 = exp1) then val1
(field1 = exp2) then val2
end
Обычно пишет Invalid use of keyword. Ругается на (field1 = exp1) Перепробовал делать по-всякому - ну никак не идёт.


DiggerAbstract   (2002-03-22 04:38:00) [6]

CASE WHEN FIELD1="1"
THEN "ONE"
ELSE "что-то тут можно написать"
END


Fay   (2002-03-22 01:19:00) [7]

А зависимость значения одного поля от другого - это правильно?


wicked   (2002-03-21 21:16:00) [8]

2 Bachin ©
сказали ж - dBase....


Bachin   (2002-03-21 19:30:00) [9]

ну спросили ведь! какой сервер?

MSSQL, Informix, Oracle:

field2 = decode(field1, exp1, val1, exp2, val2, elseval)

либо
case
exp1 then val1
.....


SVM   (2002-03-21 19:19:00) [10]

Можно что-то вроде:

update table
set field2=cast(cast(field1-5 as boolean) as float)+7

если field1=5, то оно становится равным 7,
иначе 8.
(field1, field2 - float, dbf, LocalSQL)


Johnmen   (2002-03-21 18:23:00) [11]

Каким-либо образом перебираешь значения field1 и выполняешь для каждого update db set field2="..." where field1 = "..."


dr   (2002-03-21 18:17:00) [12]

Значит в одном запросе всё сделать нельзя? Жаль...
А как примерно должна выглядеть эта процедура?


Johnmen   (2002-03-21 18:15:00) [13]

Боюсь в одном не получится !


MAxiMum   (2002-03-21 18:14:00) [14]

Не самое лучшее в плане простоты. Но со стороны эффективности (скорости работы) - напиши хранимую процедуру. Там можно использовать средства, похожие на Case в Object Pascal"е.


dr   (2002-03-21 18:10:00) [15]

база - dbase


Johnmen   (2002-03-21 18:07:00) [16]

А какая БД ?


dr   (2002-03-21 18:03:00) [17]

update db set field2="one" where field1 = "1" работает, но в 1 запросе получается сделать это только 1 раз. А как сделать много where в 1 запросе?
никак не получается разобраться


Johnmen   (2002-03-21 17:17:00) [18]

update db
set field2="one" where field1 = "1"
... и т.д. и т.п....


dr   (2002-03-21 17:03:00) [19]

чего-то не работает set field2=a*boolean(field1=1) - invalid use of keyword
база - dbase


SVM   (2002-03-21 16:43:00) [20]

А смотря какая база. В общем случае все выглядит примерно так:
set field2=a*boolean(field1=1)

field2=a, если field1=1, иначе field2=0.

В Access есть функция iif.


Наверх

Титульная страница Поиск, карта сайта Написать письмо