![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос по 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.