通过地址或电话号码加入

问题描述 投票:0回答:2

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

Select CLP_Billing_NPI As Billing_NPI
,c.FAC_NAME
,c.st_adr
,e.addr1
,e.phyaddr1
,c.phne_num
,e.phone
,PRVDR_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 [CLIA_LabFindings_NC] lf  

INNER JOIN [provider] P (NOLOCK)
on lf.CLP_Billing_NPI = p.npi  

INNER JOIN [entity] e (NOLOCK)  
on e.entid = p.entityid  

LEFT JOIN [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

当我运行查询时,由于连接,我的数据很糟糕。谁能建议一个更好的方法来做到这一点?我试图将 NPI 从我需要在 SQL 结果中按顺序填充的电子表格中保留下来,整个 2018 年,这样我就可以从 SQL 复制并粘贴到 Excel。

sql excel join left-join
2个回答
0
投票

既然你说这是合法的...完成此任务的快速而肮脏的方法是创建一系列 SQL 更新和选择,首先提取出精确的匹配项。

然后从剩余记录中,选择可能的“最佳”匹配约束。例如电话号码。您可以将所有电话号码格式化为具有相同的结构。即 (###) ###-#### 或最适合您的数据的任何内容。然后你可以对它们进行另一次精确匹配。

然后从剩余记录中选择另一个约束。例如地址号码。您需要解析该字符串以查找地址中的所有数字。然后您可以创建一个高度可能的匹配文件。尽管有些可能存在误报。这意味着您可能需要仔细观察数据并删除不良匹配。

收集那些不匹配的记录和其他剩余记录,您可以修改地址字符串以删除缩写。这可能很乏味,而且可能不是一天就能完成的。这样你就改变了“Rd”。或将“RD”或“Rd”改成“Road”。邮局有一份地址中最常用的缩写列表。您可以尽力使用这些替换,然后再次尝试地址匹配。这也将是非常不准确的。

然后您可以拿走剩余的记录并尝试最后一件事。您可以强制向地址部分下订单。因此,您首先有街道号码,然后是街道名称,然后是街道类型,然后是任何公寓或建筑物名称,然后是任何公寓或建筑物号码(或字母)等。这可以提高准确性,但仍然取决于数据是否运营商添加了所有正确的信息。

您会发现,尝试解析和匹配地址可能是一件非常草率的事情。最后,你总是会遇到一些不匹配的东西,你必须仔细观察或者干脆不使用。但是,一旦您达到替换并重新排序地址中所有信息的级别,您就可以使用其他数学公式来查找编辑距离(或您自己创建的东西)。

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


0
投票

这就是我最终所做的......

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
© www.soinside.com 2019 - 2024. All rights reserved.