sql 2008从内部联接

时间:2016-10-04 18:50:22

标签: sql-server-2008 duplicates inner-join

使用SQL 2008 R2。我正在努力寻找活跃的员工,但之前是我们其他公司的员工。以下代码有效;但是,我注意到如果员工已经为两家以上的公司工作,我会得到重复。有没有其他方法我需要写这个,以便我不会得到重复?我尝试过使用Group By和case,如果存在,似乎没有任何工作。

示例数据



╔═════════════╦══════╦══════════╦══════════╦══════════╦══════════╗
║ SSN         ║ PRCo ║ Employee ║ FullName ║ HireDate ║ ActiveYN ║
╠═════════════╬══════╬══════════╬══════════╬══════════╬══════════╣
║ 123-45-6789 ║ 17   ║ 456789   ║ John Doe ║ 05/27/13 ║ Y        ║
╠═════════════╬══════╬══════════╬══════════╬══════════╬══════════╣
║ 123-45-6789 ║ 23   ║ 456789   ║ John Doe ║ 08/22/11 ║ N        ║
╠═════════════╬══════╬══════════╬══════════╬══════════╬══════════╣
║ 123-45-6789 ║ 1    ║ 456789   ║ John Doe ║ 12/03/07 ║ N        ║
╠═════════════╬══════╬══════════╬══════════╬══════════╬══════════╣
║ 999-99-9999 ║ 17   ║ 999999   ║ Jane Doe ║ 05/27/13 ║ Y        ║
╠═════════════╬══════╬══════════╬══════════╬══════════╬══════════╣
║ 999-99-9999 ║ 23   ║ 999999   ║ Jane Doe ║ 01/26/09 ║ N        ║
╚═════════════╩══════╩══════════╩══════════╩══════════╩══════════╝




使用以下代码

select distinct p1.SSN, p1.PRCo, p1.Employee, n.FullName, p1.HireDate, p1.ActiveYN, 
    case when p1.ActiveYN = 'Y' then 'Y'
         when p2.ActiveYN = 'Y' then 'Y' 
         else 'N' end as AnyActiveCo

from PREH as p1
     inner join PREH as p2 on p1.SSN=p2.SSN
     left outer join PREHFullName as n on p1.PRCo=n.PRCo and p1.Employee=n.Employee

where p1.PRCo<>p2.PRCo

结果;第3行和第3行对于3家不同公司的员工,5是重复的,没有所需的AnyActiveCo结果;但只有2家公司的员工表现良好。

&#13;
&#13;
╔═════╦═════════════╦══════╦══════════╦══════════╦══════════╦══════════╦═════════════╗
║ Row ║ SSN         ║ PRCo ║ Employee ║ FullName ║ HireDate ║ ActiveYN ║ AnyActiveCo ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 1   ║ 123-45-6789 ║ 17   ║ 456789   ║ John Doe ║ 05/27/13 ║ Y        ║ Y           ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 2   ║ 123-45-6789 ║ 23   ║ 456789   ║ John Doe ║ 08/22/11 ║ N        ║ Y           ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 3   ║ 123-45-6789 ║ 23   ║ 456789   ║ John Doe ║ 08/22/11 ║ N        ║ N           ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 4   ║ 123-45-6789 ║ 1    ║ 456789   ║ John Doe ║ 12/03/07 ║ N        ║ Y           ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 5   ║ 123-45-6789 ║ 1    ║ 456789   ║ John Doe ║ 12/03/07 ║ N        ║ N           ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 6   ║ 999-99-9999 ║ 17   ║ 999999   ║ Jane Doe ║ 05/27/13 ║ Y        ║ Y           ║
╠═════╬═════════════╬══════╬══════════╬══════════╬══════════╬══════════╬═════════════╣
║ 7   ║ 999-99-9999 ║ 23   ║ 999999   ║ Jane Doe ║ 01/26/09 ║ N        ║ Y           ║
╚═════╩═════════════╩══════╩══════════╩══════════╩══════════╩══════════╩═════════════╝
&#13;
&#13;
&#13;

0 个答案:

没有答案