decode和case when

decode/case when:

-- 生成数据
create table sss (name varchar2(20), gender int);
insert into sss values ('樱桃小丸子', 2);
insert into sss values ('路飞', 1);
insert into sss values ('大熊', 3);
insert into sss values ('光头强', 1);
commit;

-- 查询,将 gender 的数字转化为男女
-- 1. decode 函数的方式
select name, decode(gender, 1, '雄性',
                            2, '雌性',
                               '未知性别') "性别" from sss;
-- 2. case when 的方式                               
select name, case gender
                when 1 then '雄性'
                when 2 then '雌性'
                  else '未知性别'
             end "性别" from sss;

-- 3. case when 的另一种方式             
select name, case 
                when gender <= 1 then '雄性'
                when gender >= 2 then '雌性'
                  else '未知性别'
              end "性别" from sss;

-- 给 emp 中的人加工资:
---- 1000 元以下的,加 50%
---- 2000 元以下的,加 30%
---- 3000 元以下的,加 20%
---- 其他人 5%
create table emp3 as select * from emp;
-- 如果要将所有的工资翻倍,这么写:
update emp3 set sal = sal*2;
-- 如果不同的人加不同的工资,需要用到 case when:
update emp3 set sal = (case
                         when sal <= 1000 then sal*1.5
                         when sal <= 2000 then sal*1.3
                         when sal <= 3000 then sal*1.2
                         else sal*1.05
                       end);
-- 如果 1981/5/1 之前来公司的人按照上面调薪,其他人只调 1% 呢?
-- [TODO]

猜你喜欢

转载自blog.csdn.net/qq_39860189/article/details/77941138