CASE WHEN THEN END多条件判断

题目描述:

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));


CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));


create table emp_bonus(
emp_no int not null,
received datetime not null,
btype smallint not null);


CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));

给出
emp_no、
first_name、
last_name、
奖金类型btype、
对应的当前薪水情况salary以及奖金金额bonus。
bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。 
当前薪水表示to_date='9999-01-01'

 本题主要考查 SQLite 中 CASE 表达式的用法

CASE WHEN THEN END结构有两种书写方式 :

方式一:

CASE 
            WHEN 条件1 THEN 结果1
            WHEN 条件2 THEN 结果2
            WHEN 条件3 THEN 结果3
            .........
            WHEN 条件N THEN 结果N
        END
    


方式二:

CASE 
            WHEN SEX ='1'  THEN '男'
            WHEN SEX ='0'  THEN '女'
            ELSE '其他' END
   
--注意:
   这两种方式,可以实现相同的功能。--



--第一种case when  then 写法 --
select e.emp_no,e.first_name,e.last_name,eb.btype,s.salary ,
(case  when eb.btype = '1' then s.salary*0.1
              when eb.btype = '2' then s.salary*0.2
              else s.salary*0.3
  end
    ) as bonus
from employees e 
join emp_bonus eb on e.emp_no = eb.emp_no 
join salaries s  on  s.emp_no = e.emp_no 
where s.to_date = '9999-01-01'

-- 第二种case  when  写法 --
select e.emp_no,e.first_name,e.last_name,eb.btype,s.salary ,
case eb.btype when  '1' then s.salary*0.1
              when '2' then s.salary*0.2
              else s.salary*0.3
  end
     as bonus
from employees e 
join emp_bonus eb on e.emp_no = eb.emp_no 
join salaries s  on  s.emp_no = e.emp_no 
where s.to_date = '9999-01-01'


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值