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 名时,它似乎并没有给我政府 ID 的最后四位数字相同且姓氏相同的用户。

4

2 回答 2

2

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 ne t2.PersonsID

要回答第 2 部分,您可以添加一个标志。

于 2013-02-18T04:33:31.287 回答
1

尝试像这样使用 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
于 2013-02-18T16:25:11.733 回答