2013-02-18 42 views
0

我爲一所大學工作,我被授予一項任務,對開發人員進行更改的邏輯進行一些測試。如何查找社會安全號碼最後四位數字相同的所有記錄?

我需要的是: 我需要一個SQL Server查詢,查看Persons表並查找具有相同的社會安全號碼最後四位數的記錄。除此之外,我還想看看這些記錄(SSN的最後四位數字是否相同)是否也有相同的姓氏。

這是我到目前爲止:
- 我很新的SQL,所以我堅持要弄清楚如何我只能比較SSN的最後四位數字,還發現學生誰擁有相同的最後四位數SSN和相同的姓氏。

SELECT t1.PersonsID, 
    t1.LastName, 
    t1.GovernmentID, 
    t2.PersonsID, 
    t2.LastName, 
    t2.GovernmentID 
FROM Persons t1, Persons t2 
WHERE t1.GovernmentID = t2.GovernmentID 
AND t1.PersonsID <> t2.PersonsID 

任何幫助,將不勝感激。

謝謝!

看什麼之後,喬說我作了一次嘗試:

SELECT 
    t1.cmn_personsID, 
    t1.governmentID, 
    t1.lastname, 
    t2.cmn_personsID, 
    t2.governmentID, 
    t2.lastname, 
    case when t1.LastName = t2.lastName then 1 else 0 end as SameLastName 
    from 
    CMN_Persons t1, cmn_persons t2 
    WHERE right(t1.GovernmentID, 4) = right(t2.GovernmentID, 4) 
    AND t1.cmn_PersonsID <> t2.cmn_PersonsID 

這件事已經運行了五分鐘。當我嘗試使用前10名時,似乎並沒有給我用戶提供相同的最後四位數字的政府身份證號碼和誰會有相同的姓氏。

+1

SSN是你GovernmentId在這裏? – 2013-02-18 04:21:42

+0

是的,SSN是GovernmentID。謝謝。 – NonProgrammer 2013-02-18 04:31:37

回答

1

GovernmentID是數字嗎?如果是這樣,那麼modulo將工作。

SELECT t1.PersonsID, 
    t1.LastName, 
    t1.GovernmentID, 
    t2.PersonsID, 
    t2.LastName, 
    t2.GovernmentID, 
    case when t1.LastName = t2.lastName then 1 else 0 end as SameLastName 
FROM Persons t1, Persons t2 
WHERE t1.GovernmentID % 10000 = t2.GovernmentID % 10000 
AND t1.PersonsID <> t2.PersonsID 

要回答第2部分,您可以添加一個標記。

0

嘗試使用GROUP BY和HAVING這樣。

SELECT 
Z.PersonID, 
Z.Last4, 
Z.Cnt 
LastName = (SELECT LastName FROM Persons WHERE PersonID = Z.PersonID) 
FROM 
( 
    SELECT t1.PersonsID, 
    t1.GovermentID % 10000 as Last4, 
    COUNT(*) as Cnt 
    FROM Persons t1 
    GROUP BY t1.GovermentID % 10000, PersonID 
    HAVING COUNT(*) > 1 
) Z 
ORDER BY Last4 
+0

什麼是最高百分之百? – 2013-02-18 17:55:23

+0

我的不好。不需要。我現在修好了。 – JdMR 2013-02-18 21:54:59

相關問題