ORACLE динамический запрос where, основанный на значении столбца - PullRequest
0 голосов
/ 28 сентября 2018

Я проверил ТАК вопросы / ответы для динамических запросов, обсуждая о CASE .. КОГДА .. КОНЕЦ.Но, пожалуйста, обратите внимание, что я новичок в Oracle и не смог найти подходящего решения для моего варианта использования.Спасибо.

У меня есть следующие примерные данные, и на основании условия мне нужно получить EMPID для данного отдела:

DEPTNO  EMP_ID  IS_PRIMARY  SDATE   EDATE     IS_ACTIVE
11250   12321   Y         01-Jan-17 29-Apr-18   N
11250   12343   N         01-Jan-17 29-Apr-18   N
11250   87653   N         16-Jul-18 31-Dec-00   Y

Первичная проверка - возврат идентификатора EMPLOYEE для отдела(11250), если IS_PRIMARY = 'Y' & IS_ACTIVE = 'Y'.Если IS_PRIMARY равен 'N', тогда вернуть идентификатор сотрудника, где IS_ACTIVE = 'Y' (что означает, что на основе запроса я должен получить идентификатор сотрудника 87653).

Я пробовал следующий запрос, но получаювсе записи, может кто-нибудь, пожалуйста, помогите мне.

select EMP_ID from employee a where (a.deptno='81B11' and a.is_primary = 'Y') or (a.deptno='81B11' and a.is_active='Y' and a.is_primary_territory='N');

Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете использовать EXISTS, чтобы проверить, существуют ли основные и активные сотрудники для отдела.Если они только выбирают их.Если они не существуют, просто выберите активные.

SELECT e1.emp_id
       FROM employee e1
       WHERE e1.deptno = '81B11'
             AND (EXISTS (SELECT *
                                 FROM employee e2
                                 WHERE e2.deptno = e1.deptno
                                       AND e2.is_primary = 'Y'
                                           e2.is_active = 'Y')
                  AND e1.is_primary = 'Y'
                  AND e1.is_active = 'Y'
                   OR NOT EXISTS (SELECT *
                                         FROM employee e2
                                         WHERE e2.deptno = e1.deptno
                                               AND e2.is_primary = 'Y'
                                                   e2.is_active = 'Y')
                      AND e1.is_active = 'Y');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...