Условное условие where в Oracle - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть таблица базы данных, как показано ниже

+----------+----------+------------+
| emp_code | emp_name | emp_status | 
+----------+----------+------------+
|   01     |   aaa    |     A      |
|   02     |   bbb    |     A      |
|   03     |   ccc    |     A      |
|   04     |   ddd    |     I      |
|   05     |   eee    |     I      |
|   06     |   fff    |     R      |
+----------+----------+------------+

Я хочу выбрать значения на основе emp_status, которые будут передаваться динамически

 1. If emp_status='A' it should fetch emp_codes with emp_status='A'
 2. If emp_status='I' it should fetch all emp_codes except emp_status='I'
 3. If emp_status is null then fetch all emp_codes.

Как написать одиночный sql запрос со всеми условиями?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете использовать выражение case..when, например:

SELECT *
  FROM tab
 WHERE CASE 
       WHEN :emp_status='A' THEN 'A'
       WHEN :emp_status='I' THEN emp_status 
       WHEN :emp_status is null THEN emp_status 
        END = emp_status
   AND ( emp_status != 'I' OR :emp_status is null ) 

, где :emp_status - переменная связывания, которая будет передана в запрос.

Кроме того, вы также можете использовать DECODE() функцию

SELECT *
  FROM tab
 WHERE DECODE( :emp_status, 'A', 'A', 'I', emp_status, null , emp_status ) = emp_status
   AND ( emp_status != 'I' OR :emp_status is null )  
0 голосов
/ 17 февраля 2020

Вы можете использовать условное предложение WHERE, используя операторы OR и AND следующим образом:

SELECT EMP_CODE FROM YOUR_TABLE
WHERE ('&INPUT_STATUS' = 'A' AND emp_status='A')
   OR ('&INPUT_STATUS' = 'I' AND emp_status<>'I')
   OR ('&INPUT_STATUS' IS NULL)

Cheers !!

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