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

Вниз

вопрос по SQL   Найти похожие ветки 

 
dr   (2002-03-21 16:35) [0]

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


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

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

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

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


 
dr   (2002-03-21 17:03) [2]

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


 
Johnmen ©   (2002-03-21 17:17) [3]

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


 
dr   (2002-03-21 18:03) [4]

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


 
Johnmen ©   (2002-03-21 18:07) [5]

А какая БД ?


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

база - dbase


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

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


 
Johnmen ©   (2002-03-21 18:15) [8]

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


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

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


 
Johnmen ©   (2002-03-21 18:23) [10]

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



 
SVM   (2002-03-21 19:19) [11]

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

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

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


 
Bachin ©   (2002-03-21 19:30) [12]

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

MSSQL, Informix, Oracle:

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

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


 
wicked ©   (2002-03-21 21:16) [13]

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


 
Fay ©   (2002-03-22 01:19) [14]

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


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

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


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

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


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

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


 
Val ©   (2002-03-22 13:50) [18]

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


 
Val ©   (2002-03-22 13:52) [19]

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


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

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



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

Текущий архив: 2002.04.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-32702
AlexNic
2002-03-20 22:34
2002.04.11
Работа с InterBase


1-32723
LazorenkoX
2002-03-29 22:55
2002.04.11
Маус (только не обижайтесь)


1-32870
QWest
2002-03-29 09:45
2002.04.11
Помогите други!!!!!!!!!1


1-32805
Dmitry Sheenok
2002-04-01 10:48
2002.04.11
Определить по хендлу состояние окна SW_SHOW, SW_HIDE и т.д


3-32663
SecondGray
2002-03-20 13:15
2002.04.11
Тип ftFloat в таблицах dBase и FoxPro