我在一所大学工作,我获得了一项任务,可以对开发人员所做的更改的逻辑进行一些测试。
我需要什么: 我需要一个查看Persons表的SQL Server查询,并查找具有相同社会安全号码后四位数的记录。除此之外,我还想看看这些记录(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名时,似乎没有给我的用户使用相同的政府ID的最后四位数字,并且具有相同的姓氏。
答案 0 :(得分:1)
GovernmentID是数字?如果是这样,则模数将起作用。
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部分,您可以添加标记。
答案 1 :(得分: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