0

私は大学で働いており、開発者が変更を加えたロジックのテストを行う任務が与えられています。

必要なもの:Personsテーブルを調べて、社会保障番号の最後の4桁が同じであるレコードを見つけるSQLServerクエリが必要です。それに加えて、これらのレコード(SSNの最後の4桁が同じである)も同じ姓を持っているかどうかを確認したいと思います。

これまでのところ、次のようになっています
。--SQLはかなり新しいので、SSNの最後の4桁しか比較できず、SSNの最後の4桁と同じ名前の学生を見つける方法を理解するのに苦労しています。

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

これは5分間実行されています。トップ10を使用してみたところ、governmentIDの最後の4桁が同じで、同じ名前のユーザーが表示されなかったようです。

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

GROUPBYと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 に答える