Получить уникальных активных пользователей с одним последним четырьмя SSN и другими условиями - PullRequest
0 голосов
/ 05 марта 2012

У меня есть таблица, в которой сотрудники иногда меняют имена, становятся штатными сотрудниками под другим идентификатором (FTE получают разные идентификаторы от PeopleSoft, а идентификаторы подрядчиков являются дампами от рекрутеров), а некоторые даже имеют одинаковые первый, средний, последний и последние 4 SSN. Поскольку таблица состоит из штатных сотрудников, подрядчиков и паролей с одинаковыми именами и ssn, я не на 100% уверен в уникальности таблицы.

Мне нужно представление, удовлетворяющее следующим условиям:

  • Имя
  • Фамилия
  • ID сотрудника
  • Статус (активный, прекращен)
  • Последние 4 SSN (0000)

Условия:

  • Получить все имена, где они имеют только одну последнюю четверку SSN
  • Показать Только активная запись, если доступны как Активные, так и Прекращенные (возможно, стали постоянными или наняли подрядчика под другим идентификатором из другого агентства)
  • Удалить все записи там, где есть 2+ прекращенных или 2+ активных записи

1 Ответ

0 голосов
/ 05 марта 2012

Следуя вашей логике, похоже, что вы ищете только записи, в которых один и тот же LastFourSSN отображается для одного активного и одного завершенного статуса (поскольку существует только два статуса, и вы исключаете случаи, когда 2+ активных или 2+ прекращено,единственные возможности нескольких LastFourSSN - это те, у которых 1 активен и 1 завершен).

Используя эту логику, можно построить нечто подобное, которое возвращает записи, в которых есть только 1 активная запись, соответствующая завершенной записи (из списка завершенных записей только с одной записью), и поскольку каждая запись должна соответствоватьпосле завершения мы вернем только те, которые имеют статус «Активный»:

select 
    FirstName
    ,LastName
    ,EmployeeID
    ,Status
    ,LastFourSSN
from 
    tblPeople
where
    Status = 'Active'
    and LastFourSSN in 
    (
        /*selected only entries with 1 active*/
        select
            LastFourSSN
        from 
            tblPeople
        where 
            Status = 'Active'
            and LastFourSSN in /*only show entries with matching termination record*/
                (
                    /*selected only entries with 1 termination*/
                    select
                        LastFourSSN
                    from 
                        tblPeople
                    where 
                        Status = 'Terminated'
                    group by 
                        LastFourSSN
                    having 
                        count(*) = 1
                )
        group by 
            LastFourSSN
        having 
            count(*) = 1
    )
...