UFN_CONSTITUENT_GETFUZZYDUPLICATES_2

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
@MAIDENNAME nvarchar(50) IN
@MIDDLENAME nvarchar(50) IN
@PHONENUMBER nvarchar(50) IN
@EMAILADDRESS nvarchar(100) IN
@GENDERCODE tinyint IN
@CITY nvarchar(100) IN
@STATEID uniqueidentifier IN
@COUNTRYID uniqueidentifier IN
@EMPLOYER nvarchar(100) IN
@DUPLICATESEARCHSETTINGID uniqueidentifier IN

Definition

Copy


    create function [dbo].[UFN_CONSTITUENT_GETFUZZYDUPLICATES_2](
        @KEYNAME nvarchar(100),
        @FIRSTNAME nvarchar(50) = '',
        @POSTCODE nvarchar(12) = '',
        @ADDRESSBLOCK nvarchar(150) = '',
        @MAIDENNAME nvarchar(50) = '',
        @MIDDLENAME nvarchar(50) = '',
        @PHONENUMBER nvarchar(50) = '',
        @EMAILADDRESS nvarchar(100) = '',
        @GENDERCODE tinyint = null,
        @CITY nvarchar(100) = '',
        @STATEID uniqueidentifier = null,
        @COUNTRYID uniqueidentifier = null,
        @EMPLOYER nvarchar(100) = '',
        @DUPLICATESEARCHSETTINGID uniqueidentifier = null
    ) 
    returns @DUPLICATECANDIDATES table(
        CONSTITUENTID uniqueidentifier,
        ADDRESSID uniqueidentifier,
        MATCHPERCENTAGE numeric(5, 2)
    ) as
    begin

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

        if @DUPLICATESEARCHSETTINGID is null
            set @TRANSACTIONTYPE = 'Default Criteria'
        else
            select top(1
                @TRANSACTIONTYPE = TRANSACTIONTYPE
            from 
                dbo.CONSTITUENTDUPLICATESEARCHSETTINGS DSS
            where 
                ID = @DUPLICATESEARCHSETTINGID
            order by
                DSS.DATECHANGED;

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

        if @LEFTPOSTCODECOUNT = null
            set @LEFTPOSTCODECOUNT = 3;

        if @OVERALLMATCHTHRESHOLD = null
            set @OVERALLMATCHTHRESHOLD = 70;            

        declare 
            @ISORGANIZATION bit = 0,
            @CONFIG_INCLUDENICKNAME as bit = 0,
            @CONFIG_INCLUDEALIAS  as bit = 0,
            @CONFIG_INCLUDEINACTIVE as bit = 0,
            @CONFIG_INCLUDEDECEASED as bit = 0;

        if @TRANSACTIONTYPE <> 'Default Criteria'
            begin                        
                select  
                      @CONFIG_INCLUDEINACTIVE = case when @ISORGANIZATION=1 then 0 else [INACTIVE] end,  
                      @CONFIG_INCLUDEDECEASED = case when @ISORGANIZATION=1 then 0 else [DECEASED] end,     
                      @CONFIG_INCLUDENICKNAME = case when @ISORGANIZATION=1 then 0 else [INCLUDENICKNAME] end,
                      @CONFIG_INCLUDEALIAS = case when @ISORGANIZATION=1 then 0 else [INCLUDEALIAS] end
                from  dbo.CONSTITUENTDUPLICATESEARCHSETTINGS    
                where [TRANSACTIONTYPE] = @TRANSACTIONTYPE;                    
            end

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

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

        with [CTE_CONSTITUENT_DECEASED]
        as
        (
        select
            C.ID,
            case when DC.ID is null then 0 else 1 end as ISDECEASED
        from 
            dbo.CONSTITUENT C 
            left join dbo.DECEASEDCONSTITUENT DC on C.ID = DC.ID
        ),

        [CTE_CONSTITUENT_WITH_EXACT_MATCH]
        as
        (
        select
            C.ID,
            C.FIRSTNAME,
            C.MIDDLENAME,
            C.KEYNAME,
            C.MAIDENNAME,
            C.NICKNAME,
            C.GENDERCODE,
            C.KEYNAMESOUNDEX,
            C.ISGROUP,
            C.ISORGANIZATION
        from 
            dbo.CONSTITUENT C
            inner join [CTE_CONSTITUENT_DECEASED] CTE on C.ID = CTE.ID

        where
            C.ISINACTIVE = case when @CONFIG_INCLUDEINACTIVE = 1 then C.ISINACTIVE else 0 end
            and CTE.ISDECEASED = case when @CONFIG_INCLUDEDECEASED = 1 then CTE.ISDECEASED else 0 end        
        ),

        [CTE_CONSTITUENT_WITH_ALIAS_AND_NICKNAMES]
        as
        (
        select
            ID,
            FIRSTNAME,
            MIDDLENAME,
            KEYNAME,
            MAIDENNAME,
            GENDERCODE,
            KEYNAMESOUNDEX,
            ISGROUP,
            ISORGANIZATION
        from
            [CTE_CONSTITUENT_WITH_EXACT_MATCH]
        union all
        select
            C.ID,
            A.FIRSTNAME,
            A.MIDDLENAME,
            A.KEYNAME,
            C.MAIDENNAME,
            C.GENDERCODE,
            C.KEYNAMESOUNDEX,
            C.ISGROUP,
            C.ISORGANIZATION
        from
            [CTE_CONSTITUENT_WITH_EXACT_MATCH] C
            inner join dbo.ALIAS A on C.ID = A.ID
        where    
            @CONFIG_INCLUDEALIAS = 1
        union all
        select
            ID,
            NICKNAME,
            MIDDLENAME,
            KEYNAME,
            MAIDENNAME,
            GENDERCODE,
            KEYNAMESOUNDEX,
            ISGROUP,
            ISORGANIZATION
        from
            [CTE_CONSTITUENT_WITH_EXACT_MATCH]
        where 
            @CONFIG_INCLUDENICKNAME = 1
        )

        insert into @DUPLICATECANDIDATES (
            CONSTITUENTID,
            ADDRESSID,
            MATCHPERCENTAGE
        )

        select
            C.ID,
            A.ID,
            cast((FCC.OVERALLSCORE * 100) as numeric(5, 2))
        from
            [CTE_CONSTITUENT_WITH_ALIAS_AND_NICKNAMES] C
            inner join dbo.ADDRESS A on C.ID = A.CONSTITUENTID
            left join dbo.PHONE P on C.ID = P.CONSTITUENTID
            left join dbo.EMAILADDRESS E on C.ID = E.CONSTITUENTID
            cross apply 
                dbo.UFN_FUZZYCONSTITUENTCOMPARER_COMPARECONSTITUENTS_2
                (coalesce(@FIRSTNAME, ''),
                C.FIRSTNAME,
                0,
                coalesce(@MIDDLENAME, ''),
                coalesce(C.MIDDLENAME, ''), 
                0,            
                @KEYNAME
                C.KEYNAME,
                0,        
                coalesce(@MAIDENNAME, ''), 
                coalesce(C.MAIDENNAME, ''),
                0,
                coalesce(@GENDERCODE, ''),
                coalesce(C.GENDERCODE, ''),
                1,        
                coalesce(@ADDRESSBLOCK, ''),
                coalesce(A.ADDRESSBLOCK, ''),
                0,            
                coalesce(@CITY, ''), 
                coalesce(A.CITY, ''),
                0,            
                coalesce(cast(@STATEID as nvarchar(36)), ''),
                coalesce(cast(A.STATEID as nvarchar(36)), ''),
                1,        
                coalesce(cast(@COUNTRYID as nvarchar(36)), ''),
                coalesce(cast(A.COUNTRYID as nvarchar(36)), ''),
                1,
                coalesce(@PHONENUMBER, ''),
                coalesce(P.NUMBER, ''), 
                0,            
                coalesce(@EMAILADDRESS, ''), 
                coalesce(E.EMAILADDRESS, ''),
                0,            
                coalesce(@EMPLOYER, ''), 
                '',
                0) FCC
        where
            C.KEYNAMESOUNDEX = @KEYNAMESOUNDEX 
        and  
            C.ISGROUP = 0
        and
            C.ISORGANIZATION = 0
        and
            A.POSTCODE like @LEFTPOSTCODE
        and
            cast( (FCC.OVERALLSCORE * 100) as numeric(5, 2) ) >= @OVERALLMATCHTHRESHOLD;

        return;
    end