SQL选择具有多个州工作历史的员工

时间:2015-03-18 21:00:45

标签: sql sql-server count distinct self-join

我需要一个只显示在多个州获得报酬的员工的查询。

查询将拉出三列:

  1. 雇员
  2. WorkLocation
  3. LastPayDate
  4. 我目前的尝试不成功:

    Select EmployeeID
        , WorkLocation
        , max(LastPayDate)
    from Table 
    group by EmployeeID, WorkLocation
    having COUNT(distinct WorkLocation) > 1
    

    此查询提取零记录。但我知道有些员工曾在多个州工作过。我不确定我的逻辑在哪里崩溃。

    非常感谢任何指示。

2 个答案:

答案 0 :(得分:0)

您需要有一个计数(workLocation)> 1表示他们已经在超过1个州工作。在HAVING子句中指定它。因为您只关心包含多个WorkLocations的GROUPS。

如果您要检查特定年份内的多个工作地点,您将在WHERE子句中执行该逻辑。

select EmployeeId
from table xyz
//where year(LastPayDate) == 2015
group by EmployeeId 
having count(distinct WorkLocation) > 1

答案 1 :(得分:0)

想出来。我需要使用子查询。解决方法如下:

Select t.EmployeeID
     , t.WorkLocation
     , t.LastPayDate
From Table t
Where t.EmployeeID in
    (
     Select t2.EmployeeID
     From Table t2
     Group by t2.EmployeeID
     Having count(distinct t2.WorkLocation) > 1
    )
Group by t.EmployeeID, t.WorkLocation
Order by t.EmployeeID

感谢大家的帮助。