2015-03-18 3 views
-2

Мне нужен запрос, который будет показывать только сотрудников, которые были оплачены в нескольких штатах.SQL Выберите сотрудников с историей работы в нескольких штатах

Запрос будет тянуть три колонки:

  1. EmployeeID
  2. WorkLocation
  3. LastPayDate

Моя текущая, неудачная попытка:

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

Этот запрос тянет нулевые записи , Однако я знаю, что есть сотрудники, которые работали в нескольких штатах. Я не знаю, где моя логика ломается.

Любые инструкции очень ценятся.

+1

Запрос должен содержать 0 не всех – Paparazzi

+1

'с COUNT (отдельный EmployeeID)> 1' должен возвращать 0 строк не для всех строк, так как каждая строка сгруппирована по команде EmployeeID WorkLocation' и будет иметь только одно значение. –

+0

спасибо, мой ошибка. –

ответ

0

У вас должен быть счет (workLocation)> 1, который указывает, что они работали в более чем 1 состоянии. Укажите это в предложении HAVING. Поскольку вас беспокоит только GROUPS, которые содержат несколько WorkLocations.

Если вы пытаетесь проверить несколько мест работы в течение определенного года, вы будете выполнять эту логику в предложении WHERE.

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

В настоящее время это возвращает все 'EmployeeId', которые имеют более одной строки, для любого (не нулевого)' WorkLocation' - не обязательно разных. –

+0

Перейдите к 'having count (distinct WorkLocation)> 1', это должно работать как ожидалось – dnoeth

+0

@dnoeth good catch! – JustinDanielson

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 

Спасибо всем за помощь.

Смежные вопросы