试图找到一种方法来对具有微小差异的重复项进行分组

时间:2017-02-02 18:56:55

标签: sql sql-server-2012

我正在尝试根据地址和帐户名称规范化表格。问题是地址可能被截断,缩写或有错误。我为该帐户做了一个小组地址,这让我更接近,但我有成千上万的记录。

我希望将地址分组并为每组地址设置唯一的帐户名称。我将采用重复项,并使用该帐户添加他们的帐户联系人作为我的fk。

这是我到目前为止所拥有的,但它还不够近。以前有人不得不这样做。我非常感谢任何提示。

                SELECT *,
                --SELECT DISTINCT k.Placeholder,f.Address_1,
                CASE
                    WHEN k.Placeholder IS NULL
                    THEN Clinic_Name
                    ELSE k.Placeholder
                END AS AccountName
                FROM [FL_Data].[dbo].[26K] f
                LEFT JOIN
                    ( SELECT fl.Address_1, 'Placeholder-' + CAST(MIN(fl.id) as varchar) as Placeholder
                      FROM [FL_Data].[dbo].[26K] fl
                      GROUP BY fl.Address_1
                      having count(*) > 1
                    ) k
                ON f.Address_1 = k.Address_1

以下是地址的一些示例:

3011 NW 63rd St
3011 NW 63rd Street
3013 Winghaven
3013 WINGHAVEN BLVD
301 Northlake Ave. Ste-101
301 Northlake Avenue Ste.101

1 个答案:

答案 0 :(得分:0)

如前所述 - 您可以使用google maps API: https://maps.googleapis.com/maps/api/geocode/json?address=

输出将是相同的(例如"" place_id"或几何细节)。根据那个 - 你可以找到重复的。

关于访问权限 - 您可以在C#中编写一个简单的方法,该方法接收地址作为输入并将其发送到Google API。该方法可以编译为CLR函数。这样你就可以比较所有的行。 这将是一个耗时,但如果它是一个异步过程 - 它应该没问题。