我有3张桌子。
employee (emp_id, emp_active, emp_type, emp_status)
employee_salary (emp_id, emp_code, emp_salary)
employee_history (emp_id, emp_ind)
我需要将满足以下所有条件的所有employee_history
插入employee.emp_id
:
employee.emp_active = 'Y'
employee.emp_id
在employee_history
中不存在
有超过200万条记录。
将使用以下规则设置emp_ind
的值:
对于emp_type
A和B:
对于emp_type
C,emp_ind
将为N
我可以拿出一个脚本来完成大部分工作,但是由于检查了employee_salary表中多个记录上的值,我对如何编写case语句一无所知。希望有人可以为此提供脚本。
答案 0 :(得分:2)
我认为这是您所需要的:
insert into employee_history (emp_id, emp_ind)
select
e.emp_id,
case when e.emp_status in ('A', 'B') then 'Y'
when e.emp_status = 'C' and exists (
select 1 from employee_salary s
where s.emp_id = e.emp_id
and (s.emp_code = 'C' or s.emp_code = 'D' and s.emp_salary > 0)
) then 'Y'
when e.emp_status in ('D', 'E') then 'N'
when e.emp_status = 'F' and exists (
select 1 from employee_salary s
where s.emp_id = e.emp_id and s.emp_code = 'C' s.emp_salary > 0
) and exists (
select 1 from employee_salary s
where s.emp_id = e.emp_id and s.emp_code = 'D' s.emp_salary > 0
) then 'N'
end
from employee e
where e.emp_active = 'Y'