#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'