0

假设我有一个连接表

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

这次我没有记录

请帮帮我。

注意~我只模拟了我的实时项目场景。我不能透露确切的架构或表名或与项目相关的任何内容,因为它是机密的。

提前致谢

4

3 回答 3

2
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

因此,计数必须与您正在检查的 DeptId 的数量相匹配。这些查询假设您要指定 DeptIds,这是我从您的问题中收集的。

于 2009-06-28T03:55:48.970 回答
2

此查询将查找为超过 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;

使用此方法,您必须为您要查找的每个新部门添加另一个联接。

于 2009-06-28T03:56:41.513 回答
2

这应该这样做:

通过具有 count(*) > 1 的 EmployeeId 从 EmpDept 组中选择 EmployeeId, count(*);

于 2009-06-28T04:00:21.140 回答