【发布时间】:2019-03-01 15:02:22
【问题描述】:
我对 SQL Server (2017) 很陌生,我有这种需求:
考虑一下这个记录:
╔═════════════╦═══════════════╦══════════════╦═══════╗
║ Surname ║ Name ║ Day of birth ║ City ║
╠═════════════╬═══════════════╬══════════════╬═══════╣
║ Rivers Lara ║ Wanda Leticia ║ 07/04/1956 ║ Paris ║
╚═════════════╩═══════════════╩══════════════╩═══════╝
我要在下面的列表中找到所有匹配的记录突出显示匹配的类型:
╔═════════════╦═══════════════╦══════════════╦════════╗
║ Surname ║ Name ║ Day of birth ║ City ║
╠═════════════╬═══════════════╬══════════════╬════════╣
║ Rivers Lara ║ Wanda Leticia ║ 07/04/1956 ║ London ║
║ Rivers ║ Leticia ║ 07/04/1956 ║ Rome ║
║ Rivers ║ Leticia ║ 14/03/1995 ║ Rome ║
║ Rivers Lara ║ Leticia ║ 07/04/1956 ║ Paris ║
║ Rivers Lara ║ Wanda Leticia ║ 08/07/1983 ║ Paris ║
╚═════════════╩═══════════════╩══════════════╩════════╝
例如:
第一行匹配 Surname+Name+dayofbirth
第二名:部分姓氏+部分名字+出生日期
第三名:部分姓氏+部分名字
姓氏+部分姓名+出生日期+城市的第四位
等等……
考虑到目前我们有固定数量的可能匹配但将来可能会增加(可能会添加更多列,例如税号或其他),我们将不胜感激有关如何处理此类查询的任何想法。
【问题讨论】:
-
您需要的确切输出是什么?我通过对第二张表执行多个
LEFT JOINs 来完成类似的操作,每个标准一个。所以基本上你在没有匹配时以NULL值结束,在有匹配时以值结束。然后,您可能希望使用ISNULL或COALESCE对这些结果执行另一个查询。 -
输出应该像第二个表,有一个额外的列,类型匹配(es surname,name or surname,partialname,dayofbirth 等)。这只是输出的一个想法(如果需要可以更改)。目标是找到具有 1、2、3 或 4 个相同值的人(姓氏和名字总是在 AND 中,而其他列是可选的)
-
SimoneG,任何答案都有效吗?从那以后你就没有发表过评论。
-
最后我选择了一个接近 JBJ 想法的解决方案,使用 PARSENAME 来拆分多个姓(或名字)值,而不使用 soundex(我们不仅有英文名字)。谢谢!
标签: tsql sql-server-2017