2012-08-27 21 views

回答

4

試試這個:

select * 
from 
    (
    select *, 
      count(*) over(partition by firstname, lastname, DOB) as CC 
    from YourTable 
) as T 
where T.CC > 1 
+0

感謝您的Mikael :) – user1627800

1

可以JOIN將表與自身比較firstnamelastnameDOB以確保它們是相同的值,然後將employeeid是不一樣的:

select * 
from yourtable t1 
inner join yourtable t2 
    on t1.firstname = t2.firstname 
    and t1.lastname = t2.lastname 
    and t1.dob = t2.dob 
    and t1.empid != t2.empid 

以上查詢可能會顯示重複記錄,因此您可以使用以下內容(請參閱SQL Fiddle with Demo):

select DISTINCT t1.empid, 
    t1.firstname, 
    t1.lastname, 
    t1.DOB 
from yourtable t1 
inner join yourtable t2 
    on t1.firstname = t2.firstname 
    and t1.lastname = t2.lastname 
    and t1.dob = t2.dob 
    and t1.empid != t2.empid 

或者你可以使用EXISTS(見SQL Fiddle with Demo):

select t1.empid, 
    t1.firstname, 
    t1.lastname, 
    t1.DOB 
from yourtable t1 
where exists (SELECT * 
       FROM yourtable t2 
       WHERE t1.firstname = t2.firstname 
       and t1.lastname = t2.lastname 
       and t1.dob = t2.dob 
       and t1.empid != t2.empid) 
+0

嗨Bluefeet,非常感謝你:)得到它。 – user1627800

+0

萬一有超過2人具有相同的姓名和相同的出生,這個查詢將返回(行1)*行,所以7個相同的生日將返回42行 –

+0

@ t-clausen.dk你是正確的,我會可能在查詢中包含一個「DISTINCT」以刪除任何dups ...請參閱我的編輯。 – Taryn

相關問題