我有两张桌子,都有村庄的名字。它们不是英文的,由于记录的来源不同,它们的填充方式也不同。例如,在表A中,村庄的名称是'ABCDEFGHIJK'
,而表B中的名称是'ABCDEFGH-IJK'
。一个或两个字母的差异,以及村庄的州和区域都包括在两个表中,因此,同一区域中两个村庄的相似概率非常低。但是,它们不匹配100%。您建议将这些记录链接起来。
在上图中,我有一个主表,数据是正确的,我用它作为索引文件,有表2,其中包括每个村的数据。但!!!表2中的村庄名称未正确填写。 所以,我需要用正确的数据填充数据。 如果您的建议包含SQL查询,那将非常感激。 谢谢。 :)
答案 0 :(得分:1)
首先,我认为你应该删除Table2中Village列中的特殊字符。
然后,你比较两个基于Village列的表(和其他如果有的话)
CREATE FUNCTION [dbo].[RemoveNonAlphaCharacters](@Temp VARCHAR(1000))
RETURN VARCHAR(1000)
AS
BEGIN
DECLARE @KeepValues AS VARCHAR(100)
SET @KeepValues = '%[^a-z]%' -- or '%[^a-z1-9]%' if includes numberic
WHILE PATINDEX(@KeepValues, @Temp) > 0
SET @Temp = STUFF(@Temp, PATINDEX(@KeepValues, @Temp), 1, '')
RETURN @Temp
END
SELECT T1.*, T2.Population
FROM Table1 T1
CROSS APPLY Table2 T2
WHERE T1.State = T2.State -- if have
AND T1.Zone = T2.Zone -- if have
AND T1.Name = (SELECT dbo.RemoveNonAlphaCharacters(T2.Name))
答案 1 :(得分:0)
您可以创建一个噪音表,其中包含所有噪音字符(如*,/等等)。
表架构有点像
DECLARE @tblNoise(Noise VARCHAR(4),ReplaceValues VARCHAR(4))
然后使用噪声表清除表2中的Village值。
完成后,您可以执行两个表之间的匹配。
为清除噪音,您可以借助UDF。
此外,您可以使用 SSIS 进行操作(如果您有这样的选择)
希望这有帮助。