USP_CONSTITUENTDUPLICATESEARCHPROCESS_GETSOUNDEXLIST

Returns all soundex used by Constituents in the input selection.

Parameters

Parameter Parameter Type Mode Description
@CONTEXTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_CONSTITUENTDUPLICATESEARCHPROCESS_GETSOUNDEXLIST    
(    
 @CONTEXTID uniqueidentifier    
)    
as    
begin    
 set nocount on;

 declare @ISINCREMENTAL bit = 0    
 declare @IDSETREGISTERID uniqueidentifier = null    
 declare @LASTRUNON datetime = null    
 declare @LIMITED bit = 0    

 select    
  @ISINCREMENTAL =     
   case     
    when ISINCREMENTAL = 1 and LASTRUNON is null then 0     
    else ISINCREMENTAL    
   end,    
  @LASTRUNON = LASTRUNON,    
  @IDSETREGISTERID = IDSETREGISTERID,    
  @LIMITED = case when IDSETREGISTERID is not null then 1 else 0 end    
 from dbo.CONSTITUENTDUPLICATESEARCHPROCESS    
 where ID = @CONTEXTID;    

 if @ISINCREMENTAL = 0 and @LIMITED = 0    
 begin    
 with CTE_CONSTITUENTS as  
 (select case when CONSTITUENT.ISGROUP = 1 and GROUPDATA.GROUPTYPECODE = 0 then  
  CONSTITUENTMEMBER.KEYNAMESOUNDEX  
 else  
  CONSTITUENT.KEYNAMESOUNDEX  
  end KEYNAMESOUNDEX  
  from dbo.CONSTITUENT  
  left join GROUPDATA on CONSTITUENT.ID = GROUPDATA.ID  
  left join GROUPMEMBER on GROUPMEMBER.GROUPID = GROUPDATA.ID and GROUPMEMBER.ISPRIMARY = 1  
  left join CONSTITUENT CONSTITUENTMEMBER on CONSTITUENTMEMBER.ID = GROUPMEMBER.MEMBERID  
  )  
  select     
   KEYNAMESOUNDEX,
   count(1) as SOUNDEXCOUNT
  from CTE_CONSTITUENTS  
  group by KEYNAMESOUNDEX 
  having count(1) > 1 -- More than one constituent in the group    

  order by SOUNDEXCOUNT desc;
 end    
 else    
 begin    
  with CTE_CONSTITUENTS as    
  (    
   select    
    case when CONSTITUENT.ISGROUP = 1 and GROUPDATA.GROUPTYPECODE = 0 then  
  CONSTITUENTMEMBER.KEYNAMESOUNDEX  
 else  
  CONSTITUENT.KEYNAMESOUNDEX  
  end KEYNAMESOUNDEX  
    ,  
    case     
     when @LIMITED = 0 or LIMIT.ID is not null then    
      case    
       when @ISINCREMENTAL = 0 then 1    
       else    
        case    
         when     
          CONSTITUENT.DATEADDED > @LASTRUNON or    
          CONSTITUENT.DATECHANGED > @LASTRUNON or    
          (    
           PHONE.ID is not null and     
           (    
            PHONE.DATEADDED > @LASTRUNON or    
            PHONE.DATECHANGED > @LASTRUNON    
           )     
          ) or    
          (    
           ADDRESS.ID is not null and     
           (    
            ADDRESS.DATEADDED > @LASTRUNON or    
            ADDRESS.DATECHANGED > @LASTRUNON    
           )    
          ) or    
          (    
           EMAILADDRESS.ID is not null and     
           (    
            EMAILADDRESS.DATEADDED > @LASTRUNON or    
            EMAILADDRESS.DATECHANGED > @LASTRUNON    
           )    
          )    
           then 1    
         else 0    
        end    
      end    
     else 0     
    end as CHECKFORMATCH    
   from dbo.CONSTITUENT    
   left join GROUPDATA on CONSTITUENT.ID = GROUPDATA.ID  
 left join GROUPMEMBER on GROUPMEMBER.GROUPID = GROUPDATA.ID and GROUPMEMBER.ISPRIMARY = 1  
 left join CONSTITUENT CONSTITUENTMEMBER on CONSTITUENTMEMBER.ID = GROUPMEMBER.MEMBERID  

   left join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID) LIMIT on    
    LIMIT.ID = CONSTITUENT.ID    
   left join dbo.PHONE on    
    PHONE.CONSTITUENTID = CONSTITUENT.ID and    
    PHONE.ISPRIMARY = 1    
   left join dbo.ADDRESS on    
    ADDRESS.CONSTITUENTID = CONSTITUENT.ID and    
    ADDRESS.ISPRIMARY = 1    
   left join dbo.EMAILADDRESS on    
    EMAILADDRESS.CONSTITUENTID = CONSTITUENT.ID and    
    EMAILADDRESS.ISPRIMARY = 1    
  )     
  select
   KEYNAMESOUNDEX,
   count(1) as SOUNDEXCOUNT
  from CTE_CONSTITUENTS
  where
   CHECKFORMATCH = 1
  group by KEYNAMESOUNDEX
  having count(1) > 0 -- At least one check for match

  order by SOUNDEXCOUNT desc;
 end

end