У меня есть сотрудник таблицы, у которого есть записи данных:
select * from offc.employee;
Некоторые люди покинули офис, поэтому у них есть leave_date
и некоторые люди все еще работают, чего у них нет leave_date
. Итак, я только отфильтровал сотрудника, у которого нет leave_date
в одном запросе, и сотрудника с параметром left_date в другом запросе, и объединил их, используя UNION
. Итак, я пишу запрос:
SELECT emp_id,
emp_name,
dob,
dept_id,
join_date,
leave_date,
line1,
line2,
salary,
salary upgraded_salary
FROM offc.employee
WHERE leave_date IS NOT NULL
UNION
SELECT emp_id,
emp_name,
dob,
dept_id,
join_date,
leave_date,
line1,
line2,
salary,
CASE
WHEN sysdate-join_date>5 THEN salary*1.5
WHEN sysdate-join_date<3 THEN salary*1.25
WHEN sysdate-join_date<1 THEN salary*1.01
ELSE salary
END upgraded_salary
FROM offc.employee
WHERE leave_date IS NULL;SELECT emp_id,
emp_name,
dob,
dept_id,
join_date,
leave_date,
line1,
line2,
salary,
CASE
WHEN leave_date IS NOT NULL THEN
CASE
WHEN leave_date-join_date>5 THEN salary*1.5
WHEN leave_date-join_date<3 THEN salary*1.25
WHEN leave_date-join_date<1 THEN salary*1.01
ELSE salary
END upgraded_salary
ELSE salary
END
FROM offc.employee
WHERE leave_date IS NOT NULL;
Я получилправильный вывод, как я ожидал:
Но я также пытался использовать его в одном запросе, где мне нужен внутренний регистр, я путаюсь с использованием вложенного регистра. Но я пыталсяиспользуя вложенный регистр, но он не работает. Итак, если я могу сделать это из оператора вложенного регистра, мой запрос может быть оптимизирован. Итак, я попытался:
SELECT emp_id,
emp_name,
dob,
dept_id,
join_date,
leave_date,
line1,
line2,
salary,
CASE
WHEN leave_date IS NOT NULL THEN
CASE
WHEN leave_date-join_date>5 THEN salary*1.5
WHEN leave_date-join_date<3 THEN salary*1.25
WHEN leave_date-join_date<1 THEN salary*1.01
ELSE salary
END upgraded_salary
ELSE NULL
END
FROM offc.employee
WHERE leave_date IS NOT NULL;
Я получил ошибку: ORA-00905: missing keyword
Поскольку мне нужен тот же вывод, возможно ли получить использование вложенного оператора case?