0

嗨,我正在尝试重写以下使用 CASE WHEN 的代码。我在想我可以改用解码或其他东西吗?

编码:

create table want as select 
case when (Var1<20 ) then 1 
when (40>Var1>=20 ) then 2 
when (Var1>=40 ) then 3 
else .
end as Var1
4

2 回答 2

0

decode()只支持平等。当它被引入时,我们之所以欢迎它的原因之一case()正是因为它允许我们测试大于和小于。

但是,可以嵌套decode()调用并将它们与其他函数组合以实现相同的结果。这个 ...

select id
     , var1
     , decode(greatest(var1,20), 20, 1, 
              decode(least(var1,40), 40, 3, 2 )) as trans_var
from tab
/

...实现您的case()陈述的逻辑:

select id
       , var1
       , (case when Var1 < 20 then 1 
                 when Var1 < 40 then 2 
                 when Var1 >= 40 then 3 
                 else NULL
            end) as trans_var
from tab
/

SQL Fiddle 演示。

于 2018-02-07T21:03:55.427 回答
0

这更简单地写成:

create table want as
    select (case when Var1 < 20 then 1 
                 when Var1 < 40 then 2 
                 when Var1 >= 40 then 3 
                 else NULL
            end) as Var1
于 2018-02-07T17:09:11.473 回答