题目描述:
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'