Необходимо на лету при определить все данные поля более 7 и отметить их как 60

Spectrator
Дата: 02.08.2005 15:35:58
необходимо на лету при определить все данные поля более 7 и отметить их как 60

есть запрос

select cause_value from table_name

надо без курсора 1 запрсом вывести все значения больше 7 как 60

т.е если изначально

cause_value
__________
4
7
3
44
5
23
1
6
52

то потом

cause_value
__________
4
7
3
60
5
60
1
6
60

как это сделать
SQLap
Дата: 02.08.2005 15:38:41
А что,
update table_name set cause_value = 60 where cause_value > 7
уже не модно?
vitalych
Дата: 02.08.2005 15:39:26
select case cause_value > 7 then 60 else cause_value end case from table_name
Калина
Дата: 02.08.2005 15:39:41
case , правда Вы не указали версию Oracle
SQLap
Дата: 02.08.2005 15:40:08
А потом rollback
Vadim_Maximov
Дата: 02.08.2005 15:40:29
zipfer
Дата: 02.08.2005 15:45:55
м.б. так:
select decode(greatest(cause_value-7,0),0,cause_value,60)
 from table_name
?
Alex_D
Дата: 02.08.2005 15:48:18
Калина
case , правда Вы не указали версию Oracle


Если вдруг версия Oracle не поддерживает case то можно вот так:
select decode(sign(7-n),-1,60,n) from 
(select 2 n from dual union all 
 select 23 n from dual union all 
 select 34 n from dual union all 
 select 3 n from dual 
)
Spectrator
Дата: 02.08.2005 15:56:58
update делать не надо а только select

версия Оракле 8.1.7.4


select case cause_value > 7 then 60 else cause_value end case from table_name

а если точнее

select case to_number(cause_value) > 7 then 60 else cause_value end case CAMPAIGN_LOG;

не прошло

решил сделать так

select cause_value from CAMPAIGN_LOG
where (Start_time > to_date('01.07.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and Start_time < to_date('01.08.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and to_number(cause_value)<=7)

union all

select '60' as cause_value from CAMPAIGN_LOG
where (Start_time > to_date('01.07.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and Start_time < to_date('01.08.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and to_number(cause_value)>7)

order by start_time;

так тут оба запроса проходят но не объединяются
Spectrator
Дата: 02.08.2005 15:58:26
точнее

select start_time, cause_value from CAMPAIGN_LOG
where (Start_time > to_date('01.07.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and Start_time < to_date('01.08.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and to_number(cause_value)<=7)

union all

select '60' as cause_value from CAMPAIGN_LOG
where (Start_time > to_date('01.07.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and Start_time < to_date('01.08.2005 00:00:00','dd.mm.yyyy hh24.mi.ss')
and to_number(cause_value)>7)

order by start_time;