UFN_ORGANIZATION_GETFUZZYDUPLICATES

Gets duplicate organizations

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@KEYNAME nvarchar(100) IN
@FIRSTNAME nvarchar(50) IN
@POSTCODE nvarchar(12) IN
@ADDRESSBLOCK nvarchar(150) IN

Definition

Copy


            CREATE function dbo.UFN_ORGANIZATION_GETFUZZYDUPLICATES(
                @KEYNAME nvarchar(100),
                @FIRSTNAME nvarchar(50) = '',
                @POSTCODE nvarchar(12),
                @ADDRESSBLOCK nvarchar(150) = ''
            ) 
            returns @DUPLICATECANDIDATES table(
                CONSTITUENTID uniqueidentifier,
                ADDRESSID uniqueidentifier,
                MATCHPERCENTAGE numeric(5, 2)
            ) as
            begin

                -- grab thresholds from settings table or default

                declare @LEFTPOSTCODECOUNT int;
                declare @OVERALLMATCHTHRESHOLD numeric(5, 2);

                select top(1)
                    @LEFTPOSTCODECOUNT = DSS.LEFTPOSTCODECOUNT,
                    @OVERALLMATCHTHRESHOLD = DSS.OVERALLMATCHTHRESHOLD
                from
                    dbo.CONSTITUENTDUPLICATESEARCHSETTINGS DSS
                order by
                    DSS.DATECHANGED;

                if @LEFTPOSTCODECOUNT = null
                    set @LEFTPOSTCODECOUNT = 3;

                if @OVERALLMATCHTHRESHOLD = null
                    set @OVERALLMATCHTHRESHOLD = 70;

                -- search fields

                declare @KEYNAMESOUNDEX varchar(5);
                set @KEYNAMESOUNDEX = soundex(@KEYNAME);

                declare @LEFTPOSTCODE varchar(6);
                set @LEFTPOSTCODE = left(@POSTCODE, @LEFTPOSTCODECOUNT) + '%';

                declare @NAME nvarchar(150);
                set @NAME = coalesce(@FIRSTNAME, '') + ' ' + @KEYNAME;    

                insert into @DUPLICATECANDIDATES (
                    CONSTITUENTID,
                    ADDRESSID,
                    MATCHPERCENTAGE
                )
                select 
                    C.ID,
                    A.ID,
                    cast( (FCC.OVERALLSCORE * 100) as numeric(5, 2) )
                from 
                    dbo.CONSTITUENT C
                inner join 
                    dbo.ADDRESS A on C.ID = A.CONSTITUENTID
                -- original parameters were intended for slightly different data, but the underlying CLR code treats them all in the same manner for the comparison.

                cross apply 
                    dbo.UFN_FUZZYCONSTITUENTCOMPARER_COMPARECONSTITUENTS
                    (@NAME, coalesce(@ADDRESSBLOCK, ''), @POSTCODE, '', C.NAME, coalesce(A.ADDRESSBLOCK, ''), A.POSTCODE,'') FCC
                where
                    C.KEYNAMESOUNDEX = @KEYNAMESOUNDEX 
                and  -- Constituent dupe search only applies for individuals

                    (C.ISGROUP = 1 or C.ISORGANIZATION = 1)
                and
                    A.POSTCODE like @LEFTPOSTCODE
                and
                    cast( (FCC.OVERALLSCORE * 100) as numeric(5, 2) ) >= @OVERALLMATCHTHRESHOLD;

                return;
            end