获得具有最后四个SSN和其他条件的独特活动用户

时间:2012-03-05 16:57:37

标签: sql-server view unique

我有一张桌子,员工有时会更改名称,成为另一个ID下的全职员工(FTE从PeopleSoft获得不同的ID,承包商ID是招聘人员的转储),有些甚至有相同的第一,中,最后和最后4 SSN。由于该表混合了全职和承包商以及相同名称和ssn的欺骗,我不是百分之百的唯一性表。

我需要一个符合以下条件的视图:

     
  • 名字
  •  
  • 姓氏
  •  
  • 员工ID
  •  
  • 状态(有效,已终止)
  •  
  • 最后4 SSN(0000)

条件:

     
  • 获取他们只分享SSN最后四个的所有姓名
  •  
  • 显示活动记录,如果活动和终止都可用(可能是全职,或者是来自不同机构的另一个ID下的重新雇用承包商)
  •  
  • 删除有2个已终止或2个以上活动记录的所有记录

1 个答案:

答案 0 :(得分:0)

按照你的逻辑,看起来你只是在查找同一LastFourSSN出现一个Active和一个Terminated状态的记录(因为只有两个状态,你排除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
    )