1 case when语句语法
case 变量
when conditon1 then expr1
when conditon2 then expr2
...
else expr3
end
1.2 牛客网实例
给出emp_no、first_name、last_name、奖金类型btype、对应的当前薪水情况salary以及奖金金额bonus。 bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。 当前薪水表示to_date='9999-01-01'。
1 CREATE TABLE `employees` ( 2 `emp_no` int(11) NOT NULL, 3 `birth_date` date NOT NULL, 4 `first_name` varchar(14) NOT NULL, 5 `last_name` varchar(16) NOT NULL, 6 `gender` char(1) NOT NULL, 7 `hire_date` date NOT NULL, 8 PRIMARY KEY (`emp_no`)); 9 10 create table emp_bonus( 11 emp_no int not null, 12 received datetime not null, 13 btype smallint not null); 14 15 CREATE TABLE `salaries` ( 16 `emp_no` int(11) NOT NULL, 17 `salary` int(11) NOT NULL, 18 `from_date` date NOT NULL, 19 `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));
解法:
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 inner join salaries s on e.emp_no = s.emp_no inner join emp_bonus eb on e.emp_no = eb.emp_no where s.to_date = '9999-01-01'