假设我有一个联结表
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名员工可以在多个部门工作
我的问题是找到哪个员工在多个部门工作?
e.g。
如果我想搜索为部门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。〜我只模拟了我的实时项目场景。我无法透露具体的架构或表格名称或与项目相关的任何内容,因为它是保密的。
提前致谢
答案 0 :(得分: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
因此,计数必须与您要检查的DeptIds数相匹配。这些查询假设您要指定DeptIds,这是我从您的问题中收集的内容。
答案 1 :(得分: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;
使用此方法,您必须为要查找的每个新部门添加另一个联接。
答案 2 :(得分:2)
这应该这样做:
选择EmployeeId,count(*) 来自EmpDept 按EmployeeId分组 有计数(*)> 1;