Выберите группу в отделе

#oracle #oracle-sqldeveloper

#Oracle #oracle-sqldeveloper

Вопрос:

У меня есть данные, подобные приведенным ниже. Я хочу выбрать те Emp_id, в которых присутствует только отдел кадров. Из приведенных ниже следует выбрать только 100994 и 100998.

 **EMP_ID    DEPT**
100017  FIN
100017  HR
100017  ADMIN
100994  HR
100997  ADMIN
100997  FIN
100998  HR
100999  FIN
  

Комментарии:

1. Как называется ваша таблица?

2. Вы можете назвать ее TABLE1

3. Я опубликовал ответ. Пожалуйста, проверьте

4. Если мой ответ сработал для вас, пожалуйста, отметьте его как таковой.

Ответ №1:

Вот один из вариантов:

 SQL> with test (emp_id, dept) as
  2    (select 100017, 'FIN'   from dual union all
  3     select 100017, 'HR'    from dual union all
  4     select 100017, 'ADMIN' from dual union all
  5     select 100994, 'HR'    from dual union all
  6     select 100997, 'ADMIN' from dual union all
  7     select 100997, 'FIN'   from dual union all
  8     select 100998, 'HR'    from dual union all
  9     select 100999, 'FIN'   from dual
 10    )
 11  select emp_id
 12  from test
 13  group by emp_id
 14  having min(dept) = max(dept)
 15     and min(dept) = 'HR';

    EMP_ID
----------
    100998
    100994

SQL>
  

Ответ №2:

Я бы рекомендовал использовать подзапрос для подсчета записей. Если количество записей для определенного идентификатора больше 1, тогда пропустите идентификатор.

 SELECT `emp_id`, `dept` FROM (
    SELECT SUM(1) AS `count`, `emp_id`, `dept`
    FROM `table1`
    GROUP BY `emp_id`
) AS `derived`
WHERE `count` = 1 AND `dept` = 'HR'