问题:
查找 Person 表中名字和姓氏相同或 SSN 相同的匹配记录数。
给定
表结构:人
FirstName
LastName
SSN
RecordId
数据:在人员表中
╔═══════════╦══════════╦═════════════╦══════════╗
║ FIRSTNAME ║ LASTNAME ║ SSN ║ RECORDID ║
╠═══════════╬══════════╬═════════════╬══════════╣
║ Bob ║ Smith ║ 111-11-1111 ║ 1 ║
║ Robert ║ Smyth ║ 111-11-1111 ║ 2 ║
║ Bob ║ Smith ║ 222-22-2222 ║ 3 ║
║ Tom ║ Gunn ║ 333-33-3333 ║ 4 ║
║ Jim ║ Gunn ║ 444-44-4444 ║ 5 ║
║ Jimmy ║ Gunn ║ 444-44-4444 ║ 6 ║
║ Alice ║ Jones ║ 555-55-5555 ║ 7 ║
║ Alice ║ Jones ║ 666-66-6666 ║ 8 ║
╚═══════════╩══════════╩═════════════╩══════════╝
期望的结果:
╔════════════╦═══════════╦══════════╦═════════════╦══════════╗
║ MATCHCOUNT ║ FIRSTNAME ║ LASTNAME ║ SSN ║ RECORDID ║
╠════════════╬═══════════╬══════════╬═════════════╬══════════╣
║ 3 ║ Bob ║ Smith ║ 111-11-1111 ║ 1 ║
║ 2 ║ Robert ║ Smyth ║ 111-11-1111 ║ 2 ║
║ 2 ║ Bob ║ Smith ║ 222-22-2222 ║ 3 ║
║ 1 ║ Tom ║ Gunn ║ 333-33-3333 ║ 4 ║
║ 2 ║ Jim ║ Gunn ║ 444-44-4444 ║ 5 ║
║ 2 ║ Jimmy ║ Gunn ║ 444-44-4444 ║ 6 ║
║ 2 ║ Alice ║ Jones ║ 555-55-5555 ║ 7 ║
║ 2 ║ Alice ║ Jones ║ 666-66-6666 ║ 8 ║
╚════════════╩═══════════╩══════════╩═════════════╩══════════╝
我试过的
我尝试使用 GROUP BY 和 LEFT self JOIN 来解决这个问题。
GROUP BY 失败,因为无法有条件地分组。
LEFT self JOIN 失败,因为它大致返回匹配数的平方。
我会发布我尝试的代码,但我的真实表有大量列,实际上要复杂得多,几乎肯定会掩盖这个问题。