Ошибка ключевого слова в запросе Oracle Sql

Я пробую этот запрос

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".

пожалуйста, помогите мне

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
51
3

Ответы 3

Псевдоним идет после слова end.

select case when this then that
else somethingelse end aliasName

У вас есть это:

select case when this then that aliasName
else something else aliasName end 

Слово salary между case и when является проблемой в новой версии вашего вопроса.

Dan Bracuk 12.04.2018 18:48

Этот должен в порядке, что касается синтаксиса:

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 почти одинаковы - заметьте, вы смотрите на

  • 1-й: when commision_pct <= 0.15
  • 2-й: when 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, в этот момент он показывает ошибку «отсутствует ключевое слово».

ADITYA GUPTA 13.04.2018 18:07

Нет, ключевое слово не пропущено. Я отредактировал свое сообщение и добавил еще код - посмотрите.

Littlefoot 13.04.2018 20:01

вот ваш запрос:

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;

Другие вопросы по теме