Я пробую этот запрос
select
employee_id
,first_name
,last_name
, case
salary when(( commission_pct > 0) AND (commission_pct <= 0.15))
then salary*20/100
when commission_pct > 0.15
then salary*25/100
else 0
end INCENTIVE_AMT
from employees
order by employee_id;
но он показывает ошибку отсутствующего ключевого слова
Я получаю эту ошибку в точке "Commission_pct> 0".
пожалуйста, помогите мне


Псевдоним идет после слова end.
select case when this then that
else somethingelse end aliasName
У вас есть это:
select case when this then that aliasName
else something else aliasName end
Этот должен в порядке, что касается синтаксиса:
select employee_id,
first_name,
last_name,
case when commision_pct > 0 and commision_pct <= 0.15 then salary * 20 / 100
when commision_pct < 0.15 then salary * 25 / 100
else 0
end incentive_amt
from employees
order by employee_id;
Однако это не имеет особого смысла - первые два условия CASE почти одинаковы - заметьте, вы смотрите на
when commision_pct <= 0.15when commision_pct < 0.15Я бы сказал, что вы должны это изменить.
[Обновлено: ключевое слово не пропущено]
Я создал таблицу дурачок EMPLOYEES, чтобы запрос не завершился ошибкой. Потом запустил - как видите, все нормально. Я предлагаю вам сделать то же самое - опубликовать CREATE TABLE и SELECT, выполненные в вашем сеансе SQL * Plus, чтобы мы могли увидеть, что вы сделали и как отреагировал Oracle.
SQL> create table employees
2 (employee_id number,
3 first_name varchar2(20),
4 last_name varchar2(20),
5 commision_pct number,
6 salary number
7 );
Table created.
SQL> select employee_id,
2 first_name,
3 last_name,
4 case when commision_pct > 0 and commision_pct <= 0.15 then salary * 20 / 100
5 when commision_pct < 0.15 then salary * 25 / 100
6 else 0
7 end incentive_amt
8 from employees
9 order by employee_id;
no rows selected
SQL>
на самом деле проблема возникает, когда он достигает первого условия> 0, в этот момент он показывает ошибку «отсутствует ключевое слово».
Нет, ключевое слово не пропущено. Я отредактировал свое сообщение и добавил еще код - посмотрите.
вот ваш запрос:
select
employee_id,
first_name,
last_name,
case
when COMMISSION_PCT > 0 AND COMMISSION_PCT <= 0.15
then salary*20/100
when commission_pct < 0.15
then salary*25/100
else 0
end INCENTIVE_AMT
from employees
order by employee_id;
Слово
salaryмеждуcaseиwhenявляется проблемой в новой версии вашего вопроса.