Запрос сотрудников и отделов базы данных с Sql - PullRequest
0 голосов
/ 28 июня 2009

Предположим, у меня есть распределительная таблица

EmployeeId  DeptId   
---------   ------
    1        1
    1        2
    1        3
    2        1
    2        2
    2        3   
    3        1
    3        2
    4        1
    5        2
    5        3
    6        1
    6        2
    6        3

Так, 1 сотрудник может работать во многих отделах

Моя проблема в том, чтобы найти сотрудника, работающего в нескольких отделах?

, например

Если я хочу найти сотрудника, который работает в отделе 1,2,3, результат будет: 1,2,6

Если я хочу найти сотрудника, который работает в отделе 2 & 3, результат будет 1,2,5,6

Если я хочу найти сотрудника, который работает в отделе 1 & 2, результат будет 1,2 ,3,6

Я пробовал со следующими запросами

a) SELECT DISTINCT EmployeeId FROM dbo.EmpDept WHERE DeptId in (2,3) 

Я получил неправильный результат

b) SELECT DISTINCT EmployeeId FROM dbo.EmpDept WHERE DeptId = 2 AND  DeptId = 3

На этот раз у меня нет записей

Пожалуйста, помогите мне.

N.B. ~ Я только симулировал свой сценарий проекта в реальном времени. Я не могу раскрыть точную схему или имена таблиц или что-либо, связанное с проектом, поскольку это конфиденциально.

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 28 июня 2009

этот запрос найдет всех сотрудников, которые работают в более чем 1 отделе.

select employeeid, count(*) 
from dbo.EmpDept 
group by employeeid 
having count(*) > 1;

если вы надеетесь собрать данные о сотрудниках, которые пересекаются с набором определенных EmpDepts, вы можете использовать собственные объединения:

select a.employeeid 
from dbo.EmpDept a, dbo.EmpDept b
where a.employeeid = b.employeeid 
  and a.deptid = 1
  and b.deptid = 2;

используя этот метод, вам нужно будет добавить еще одно объединение для каждого нового отдела, который вы ищете.

2 голосов
/ 28 июня 2009

Это должно сделать это:

выберите EmployeeId, количество (*) от EmpDept group by EmployeeId имеющий количество (*)> 1;

2 голосов
/ 28 июня 2009
select employeeid
from EmpDept
where DeptId in (2,3) 
group by employeeid
having count(*) = 2

или

select employeeid
from EmpDept
where DeptId in (1,2,3) 
group by employeeid
having count(*) = 3

Итак, счетчик должен соответствовать количеству проверяемых DeptIds. В этих запросах предполагается, что вы хотите указать DeptIds, что я и получил из вашего вопроса.

...