join地址或电话号码

我有两个电子表格,我加载到SQL表格。 我们称之为excel1和excel2。 我需要从Excel中的数据填充excel1中的列。 问题是,没有钥匙,所以我必须join地址和电话号码。 我知道这不是一个好主意,但这是唯一的方法,我的老板需要我这样做。 将会出现错误,但我们计划稍后再进行手动修复。 无论如何,目标是通过地址或电话匹配电子表格,以便excel1中的NPI链接到excel2中的PRVDR_NUM。

Select CLP_Billing_NPI As Billing_NPI ,c.FAC_NAME ,c.st_adr As [CMS_Addr1] ,e.addr1 As QNXT_Addr1 ,e.phyaddr1 As QNXT_PhyAddr1 ,c.phne_num As CMS_Phone_Num ,e.phone As QNXT_Phone ,PRVDR_NUM As CLIA_NUM ,CRTFCT_TYPE_CD ,Case When CRTFCT_TYPE_CD = '1' Then 'Waived' When CRTFCT_TYPE_CD = '2' Then 'PPMP' When CRTFCT_TYPE_CD = '3' Then 'High Cert' When CRTFCT_TYPE_CD = '4' Then 'PPM' When CRTFCT_TYPE_CD = '9' Then 'Reg' End As LLA_CLIA_Certification_Level ,CRTFCT_EFCTV_DT ,TRMNTN_EXPRTN_DT From [LA_Temp].[dbo].[CLIA_LabFindings_NC] lf INNER JOIN [PlanReport_QNXT_LA].[dbo].[provider] P (NOLOCK) on lf.CLP_Billing_NPI = p.npi INNER JOIN [PlanReport_QNXT_LA].[dbo].[entity] e (NOLOCK) on e.entid = p.entityid LEFT JOIN [LA_Temp].[dbo].[CLIA_POS] c (NOLOCK) on (c.[ST_ADR] = e.addr1 or c.[ST_ADR] = e.[phyaddr1] or c.[PHNE_NUM] = e.[Phone]) order by CLP_Billing_NPI 

Excel电子表格中有2018行(只有81个独特的NPI)行,我需要使用以下的excel2列来填充。 这些列是:CLIA_NUM,CRTFCT_TYPE_CD,LLA_CLIA_Certification_Level,CRTFCT_EFCTV_DT,TRMNTN_EXPRTN_DT

当我运行我的查询,我的数据是废话,因为联接。 任何人都可以请build议更好的方法来做到这一点? 任何事情都会非常有帮助,因为我需要在今天结束之前完成这项工作,而我今天正在接受8小时的培训。 我正在试图保留电子表格中的NPI,我需要在SQL结果中填充2018年,所以我可以从SQL复制和粘贴到Excel。

那么既然你说这是合法的…快速和肮脏的方法来完成这个工作是创build一系列的SQL更新和select,拉出你的精确匹配第一。

然后从剩余的logging中select一个“最佳”匹配的约束条件。 如电话号码。 您可以格式化所有电话号码以具有相同的结构。 即(###)### – ####或任何最适合您的数据。 那么你可以做一个精确的匹配。

然后从剩余的logging中select另一个约束。 如地址号码。 您需要parsingstring以查找地址中的所有数字。 然后,您可以创build一个高度可能的匹配文件。 虽然有些可能有误报。 这意味着您可能需要监视数据并删除错误的匹配项。

收集那些不好的匹配和其他剩余的logging,你可以按摩你的地址string以删除缩写。 这可能是单调乏味的,并且可能在一天之内不可行。 因此你改变了“路”。 或“RD”或“Rd”改成“Road”。 邮局有地址中最常用的缩写列表。 你可以用这些替代品尽力而为,然后再次尝试地址匹配。 这也是非常不准确的。

然后你可以拿走任何剩余的logging,并尝试最后一件事。 您可以强制订单到地址部分。 因此,您首先有街道号码,然后是街道名称,然后是街道types,然后是任何公寓或build筑物名称,然后是任何公寓或build筑物号码(或字母)等。这可以提高准确性,但仍然受到数据操作员添加了所有正确的信息。

正如你会发现,试图parsing和匹配地址可能是一个非常草率的事情。 最后,你总是会有不匹配的,你必须要眼球或不使用。 但是,一旦你达到你已经replace的地步,并重新sorting地址中的所有信息,就可以使用其他math公式来findLevenshtein距离(或者你自己创造的东西)。

我希望有一点帮助。 祝你好运…并记住…小林丸是一个可击败的场景。 ;)

这就是我最终做的

 Select CLP_Billing_NPI As Billing_NPI ,fullname ,c.FAC_NAME ,c.st_adr As [CMS_Addr1] ,e.addr1 As QNXT_Addr1 ,e.phyaddr1 As QNXT_PhyAddr1 ,c.phne_num As CMS_Phone_Num ,e.phone As QNXT_Phone ,PRVDR_NUM As CLIA_NUM ,CRTFCT_TYPE_CD ,Case When CRTFCT_TYPE_CD = '1' Then '3 High Cert' When CRTFCT_TYPE_CD = '2' Then '1 Waived' When CRTFCT_TYPE_CD = '3' Then '3 High Cert' When CRTFCT_TYPE_CD = '4' Then '2 PPMP' When CRTFCT_TYPE_CD = '9' Then '9 REG' End As LLA_CLIA_Certification_Level ,CRTFCT_EFCTV_DT ,TRMNTN_EXPRTN_DT Into #tempNC From [LA_Temp].[dbo].[CLIA_LabFindings_NC] lf LEFT JOIN [PlanReport_QNXT_LA].[dbo].[provider] P (NOLOCK) on lf.CLP_Billing_NPI = p.npi INNER JOIN [PlanReport_QNXT_LA].[dbo].[entity] e (NOLOCK) on e.entid = p.entityid INNER JOIN [LA_Temp].[dbo].[CLIA_POS] c (NOLOCK) on (c.[ST_ADR] = e.addr1 or c.[ST_ADR] = e.[phyaddr1] or c.[PHNE_NUM] = e.[Phone]) WHERE [TRMNTN_EXPRTN_DT] > 20150101 order by CLP_Billing_NPI Begin Tran; update [LA_Temp].[dbo].[CLIA_LabFindings_NC] set clia# = NC.clia_num ,[CMS CRTFCT_TYPE_CD] = cast(NC.CRTFCT_TYPE_CD As char(1)) ,[LLA CLIA Certification Level:_1Waived_2PPMP_3High Cert] = NC.LLA_CLIA_Certification_Level ,[CLIA Begin Date] = Convert(varchar(10),CONVERT(date,NC.CRTFCT_EFCTV_DT,101),101) ,[CLIA End Date] = Convert(varchar(10),CONVERT(date,NC.TRMNTN_EXPRTN_DT,101),101) from [LA_Temp].[dbo].[CLIA_LabFindings_NC] lf inner join #tempNC NC on CLP_Billing_NPI = NC.Billing_NPI 
Interesting Posts