使用Sql进行员工和部门数据库查询

时间:2009-06-28 03:46:29

标签: sql database select distinct

假设我有一个联结表

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。〜我只模拟了我的实时项目场景。我无法透露具体的架构或表格名称或与项目相关的任何内容,因为它是保密的。

提前致谢

3 个答案:

答案 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;