Oracle SQL - синтаксис CASE - PullRequest
0 голосов
/ 05 июня 2018

Предположим, что этот запрос работает нормально:

SELECT 
   first_name,
   consultant_id,
   CASE consultant_id
    WHEN 1 THEN 'First Consultant'
    WHEN 2 THEN 'Second Consultant'
   END
FROM consultant
ORDER BY first_name;

Почему я не могу добавить еще одно предложение WHEN, используя некоторую логическую логику, отличную от подразумеваемой, равной двум в приведенных выше предложениях WHEN?Например:

SELECT 
   first_name,
   consultant_id,
   CASE consultant_id
    WHEN 1 THEN 'First Consultant'
    WHEN 2 THEN 'Second Consultant'
    WHEN BETWEEN 3 AND 12 THEN 'Everyone else'
   END
FROM consultant
ORDER BY first_name;

Который выдает эту ошибку:

ORA-00936: missing expression
00936. 00000 -  "missing expression"
*Cause:    
*Action:
Error at Line: 7 Column: 10

Есть ли способ сделать эту работу без использования более подробного:

SELECT 
   first_name,
   consultant_id,
   CASE 
    WHEN consultant_id = 1 THEN 'First Consultant'
    WHEN consultant_id = 2 THEN 'Second Consultant'
    WHEN consultant_id BETWEEN 3 AND 12 THEN 'Everyone else'
   END
FROM consultant
ORDER BY first_name;

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Также, в зависимости от ваших требований, вы можете использовать:

SELECT
   first_name,
   consultant_id,
   CASE consultant_id
    WHEN 1 THEN 'First Consultant'
    WHEN 2 THEN 'Second Consultant'
    ELSE 'Everyone else'
   END
FROM consultant
ORDER BY first_name
/

Надеюсь, что это поможет ....

0 голосов
/ 05 июня 2018

Да, вы правы, к сожалению, невозможно иметь условия в кратком синтаксисе.

Документация вызывает короткий синтаксис "simple_case_expression"

CASE expr WHEN comparision_expr THEN return_expr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...