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




Вниз

вопрос по 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 ....




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




Наверх





Память: 0.74 MB
Время: 0.032 c
1-32869           SeF                   2002-03-23 00:49  2002.04.11  
Путь к DLL


3-32654           Hermit                2002-03-19 18:07  2002.04.11  
BDE: Программная смена языка драйвера BDE


4-33027           AndrewBee             2002-01-26 15:28  2002.04.11  
WinRar


1-32885           AlexUrsik             2002-03-29 16:57  2002.04.11  
Интересует работа с нестандартными непрямоугольными рисунками


3-32691           der                   2002-03-06 12:48  2002.04.11  
круговерть с DLL