【发布时间】:2020-02-10 10:53:00
【问题描述】:
我遇到了一个问题,我需要使用模糊匹配填充历史数据。我正在使用 SQL Server 2014 开发人员版
MainTbl.UNDERWRITER_CODE 是需要填充数据以代替 NULL 的位置。此数据需要来自LKP 表。匹配标准是MainTbl.UNDERWRITER_NAME 和LKP.UNDERWRTIER_NAME
样本:
CREATE TABLE MainTbl(UNDERWRITER_CODE int, UNDERWRITER_NAME varchar(100))
INSERT INTO MainTbl VALUES
(NULL,'dylan.campbell'),
(NULL,'dylanadmin'),
(NULL,'dylanc'),
(002,'Dylan Campbell'),
(002,'dylan.campbell'),
(002,'dylanadmin'),
(NULL,'scott.noffsinger'),
(001,'Scott Noffsinger')
CREATE TABLE LKP(UNDERWRITER_CODE int, UNDERWRITER_NAME varchar(100))
INSERT INTO LKP VALUES
(002,'Dylan Campbell'),
(001,'Scott Noffsinger')
预期输出:
2 dylan.campbell
2 dylanadmin
2 dylanc
2 Dylan Campbell
2 dylan.campbell
2 dylanadmin
1 scott.noffsinger
1 Scott Noffsinger
【问题讨论】:
-
@MattEvans:我应该如何实现它?可以简单分享一下吗?我有大约十万行需要受到影响
-
老实说,这并不是 SQL Server 的真正强项。你可以使用
SOUNDEX或DIFFERENCE之类的东西。也许依赖于DIFFERENCEreturns a value of 3 or 4?我们真的没有很多样本可以作为基础。 -
如果您的查找中有“Dylan Smith”怎么办? dylanadmin 被分配到什么位置?
-
我要检查的第一件事:使用
GROUP BY找出代码为NULL 的UNDERWRITER_NAME 的所有变体。我会将此列表推送到映射表中,并以半自动方式(自动化和手动更正的混合)找到一个常见的表达式。最后我会使用这个清理过的映射来进行 JOIN。
标签: sql sql-server tsql fuzzy-logic