Quantcast
Viewing all articles
Browse latest Browse all 7696

Help on optimizing query

Good day I've been optimizing this query for a time now.. originally all the joins are combined through out the whole query... what I did was create a temporary tables to gather all the data first then separated the joins in two portions.. one it applied to the temporary table(#tempclaims) and another is applied to the output table(#openclaimstemp).. but then only minimal difference in time was produced.. may you kindly help me simplify my query...

BEGIN  

DECLARE
@IsCount int = 0,
@AssignTo nvarchar(30) = '',
@ClaimStatus nvarchar(50)= '',
@DelayDaysFrom int = 2,
@DelayDaysTo int = 10000  


DECLARE @QUERY varchar(max) 
DECLARE @COUNT INT

                                
IF @DelayDaysFrom = 1              
BEGIN              
 SET @DelayDaysFrom = 2              
 SET @DelayDaysTo = 10000              
END


  IF object_id('tempdb..#OpenClaimTemp') IS NOT NULL
  BEGIN
  DROP TABLE #OpenClaimTemp   
  END
 
  CREATE TABLE #OpenClaimTemp               
   (                
		[PROVIDERCODE] [VARCHAR](150) NULL, [PROVIDERNAME] [VARCHAR](150) NULL, [COMPANY] [VARCHAR](250) NULL, [FUNDING_MGNT] [VARCHAR](50) NULL, [BATCHNO] NVARCHAR(50)  NULL, [CLAIMNO] NVARCHAR(50)  NULL,                
		[PHYSICIAN_NAME] [VARCHAR](150) NULL, [PATIENT_NAME] [VARCHAR](150) NULL, [PAYORLINK_RECEIVED_DATE] [NVARCHAR](50) NULL, [MAXICARE_RECEIVED_DATE] NVARCHAR(50) NULL, [AVAILMENT_DATE] NVARCHAR(50) NULL,  
		[CLAIM_STATUS] [VARCHAR](150) NULL, [CLAIM_TYPE] [VARCHAR](150) NULL, [PROCESSOR] [VARCHAR](150) NULL, [NET_PAYABLE_AMOUNT] [VARCHAR](150) NULL, [NO._OF_DAYS_DELAYED] [VARCHAR](150) NULL ,                                       
		[ASSIGN_TO] [VARCHAR](150) NULL, [PPD] NVARCHAR(50) NULL, [PPD_DUE_DATE] NVARCHAR(50) NULL, [CREDIT_LIMIT] [VARCHAR](150) NULL, [PRESCRIPTION_TERM] [VARCHAR](250) NULL,  
		[PRESCRIPTION_CLAUSE] [VARCHAR](500) NULL, [DAYS_DELAYED_FROM_PT] [VARCHAR](150) NULL, [PRESCRIBED] [VARCHAR](10) NULL, [LOA_NO] NVARCHAR(50)  NULL, [LOA_AMOUNT] [varchar](150) NULL,   
		[BATCH_REMARKS] [varchar](max) NULL, [BATCH_NOTE] [varchar](max) NULL, AMOUNT_ENCODED [VARCHAR](150) NULL
     )    
                                    
IF @IsCount = 0 -- FOR BCP                                            
 BEGIN  


   IF object_id('tempdb..#OpenClaimCountTemp') IS NOT NULL
   BEGIN
   DROP TABLE #OpenClaimCountTemp
   END
 
    CREATE TABLE #OpenClaimCountTemp                                              
  (                                                  
   [RECEIVEDDATE] NVARCHAR(50) NULL,[PROVIDERCODE] [VARCHAR](150) NULL, [PROVIDERNAME] [VARCHAR](150) NULL, [COMPANY] [VARCHAR](250) NULL, [FUNDING_MGNT] [VARCHAR](50) NULL, [BATCHNO] NVARCHAR(50)  NULL,[CLAIMNO] NVARCHAR(50)  NULL,          
   [PHYSICIAN_NAME] [VARCHAR](150) NULL, [PATIENT_NAME] [VARCHAR](150) NULL,[PAYORLINK_RECEIVED_DATE] NVARCHAR(50) NULL, [MAXICARE_RECEIVED_DATE] NVARCHAR(50) NULL, [AVAILMENT_DATE] NVARCHAR(50) NULL,  
   [CLAIM_STATUS] [VARCHAR](150) NULL, [CLAIM_TYPE] [VARCHAR](150) NULL, [PROCESSOR] [VARCHAR](150) NULL, [NET_PAYABLE_AMOUNT] [VARCHAR](150) NULL, [NO._OF_DAYS_DELAYED] [VARCHAR](150) NULL ,                                               
   [ASSIGN_TO] [VARCHAR](150) NULL, [PPD] NVARCHAR(50) NULL, [PPD_DUE_DATE] NVARCHAR(50) NULL, [CREDIT_LIMIT] [VARCHAR](150) NULL, [PRESCRIPTION_TERM] [VARCHAR](250) NULL,  
   [PRESCRIPTION_CLAUSE] [VARCHAR](500) NULL, [DAYS_DELAYED_FROM_PT] [VARCHAR](150) NULL, [PRESCRIBED] [VARCHAR](2) NULL, [LOA_NO] NVARCHAR(50)  NOT NULL, [LOA_AMOUNT] [varchar](150) NULL,   
   [BATCH_REMARKS] [varchar](max) NULL, [BATCH_NOTE] [varchar](max) NULL, AMOUNT_ENCODED [VARCHAR](150) NULL  
  ) 
  
  
   SET @QUERY =  
    'SELECT 
    CORPCODE                =   m.CorpCode,
    PHYSICIANCODE            =  bh.PhysicianCode,
    CLAIMSTATUS			    =   c.ClaimStatus,
	RECEIVEDDATE		    =   ci.ReceivedDate,
	PROVIDERCODE		    =   p.ProviderCode,
	PROVIDERNAME	        =   p.ProviderName,
    BATCHNO		            =   bh.BatchNo,
    CLAIMNO		            =   c.ClaimNo,
    PATIENTNAME				=   c.PatientName,
    PAYORLINK_RECEIVED_DATE =   CONVERT(varchar(20),ISNULL(bh.ReceivedDate,''01/01/1900''), 101),
    MAXICARE_RECEIVED_DATE  =   CONVERT(varchar(20),ISNULL(ci.ReceivedDate,''01/01/1900''), 101),
    AVAILMENT_DATE          =   CONVERT(varchar(20),ISNULL(c.AdmissionDate,''01/01/1900''), 101),
  
    CLAIMS_TYPE	= 
     CASE 
		WHEN bh.ClaimType = ''IP'' THEN ''Hospital Bill Inpatient''              
		WHEN bh.ClaimType = ''OP'' THEN ''Hospital Bill Outpatient''              
		WHEN bh.ClaimType = ''PI'' THEN ''PF Inpatient''              
		WHEN bh.ClaimType = ''PO'' THEN ''PF Outpatient''              
		WHEN bh.ClaimType = ''RI'' THEN ''Reimbursement Inpatient''              
		WHEN bh.ClaimType = ''RO'' THEN ''Reimbursement Outpatient''  
        ELSE ''Invalid''            
     END,
     PROCESSOR             = ci.UserID,
     [NO._OF_DAYS_DELAYED] = DATEDIFF(DD, ISNULL(ci.ReceivedDate, ''01/01/1900''), GETDATE()),
     ASSIGN_TO			   = bh.AssignTo,
     --PPD				   = ISNULL((SELECT TOP 1 PPD FROM ClaimsProcess.dbo.fxnPPDProvider5(P.ProviderCode,c.ClaimNo)),''N''),
     --PPD_DUE_DATE		   = ISNULL((SELECT TOP 1 DUEDATE FROM ClaimsProcess.dbo.fxnPPDProvider5(P.ProviderCode,c.ClaimNo)),''NONE''),
     PPD = ISNULL(PPD.PPD,''N''),    
     PPD_DUE_DATE  = ISNULL(convert(varchar(10),PPD.DUEDATE,101),''NONE''),   
     CREDIT_LIMIT		   = ISNULL(p.CreditLimit,''''),
     PRESCRIPTION_TERM     = ISNULL(p.PrescriptionTerm,''''),
     DAYS_DELAYED_FROM_PT  = 
      CASE 
	   WHEN p.PrescriptionTerm is null THEN ''''  
       ELSE DATEDIFF(D,c.AdmissionDate,ci.ReceivedDate) - p.PrescriptionTerm   
      END,
     PRESCRIBED =
	  CASE 
	   WHEN ISNULL(p.PrescriptionTerm,'''') < DATEDIFF(D,c.AdmissionDate,ci.ReceivedDate) THEN ''Y''  
       ELSE ''N''  
      END,   
	 BATCH_REMARKS         = bh.Remarks, 
	 BATCH_NOTE            = ISNULL(bh2.Notes,''''), 
	 PRESCRIPTION_CLASE    = ISNULL(p.PrescriptionClause,''''), 
	 AMOUNT_ENCODED		   = ISNULL(RC.TOTALDUE,0.00), 
	 CLAIMNO2			   = ci.ClaimNo

    
 INTO #TempClaims 
 FROM BatchHeader bh WITH (NOLOCK)              
    INNER JOIN ClaimsInfo ci WITH (NOLOCK) ON bh.BatchNo = ci.BatchNo  
    LEFT JOIN PPD ppd with(nolock) on  ppd.BATCHNO = bh.BATCHNO               
    INNER JOIN Claims c WITH (NOLOCK) ON ci.ClaimNo = c.ClaimNo    
    INNER JOIN Members m WITH (NOLOCK) ON c.EmpID = m.EmpID    
    INNER JOIN Provider p WITH (NOLOCK) ON bh.ProviderCode = p.ProviderCode 
    LEFT JOIN  vwVoidClaims vw WITH (NOLOCK) ON vw.CLAIMNO = c.ClaimNo              
    LEFT JOIN  CompanyTestAccount cta WITH (NOLOCK) ON m.CorpCode = cta.CorpCode              
    LEFT JOIN Registration2.dbo.BatchHeader bh2 WITH(NOLOCK) ON bh.BatchNo = bh2.BatchNo         
    LEFT JOIN REGISTRATION2..CLAIMS RC WITH(NOLOCK) ON RC.CLAIMNO = C.ORACLECLAIMNO AND RC.LOENO = C.AUTHORIZATIONCODE'                        



IF @AssignTo = 'OTHER GROUPS'         
 BEGIN
	 SET @QUERY +=   '
	 WHERE                                                    
     c.ClaimStatus not in (''33'',''22'',''11'',''95'',''00'',''88'',''55'')                                          
     AND bh.CreatedBy <> ''ELINK''                                                  
     AND vw.CLAIMNO IS NULL                                                  
     AND bh.AssignTo in (''OP1'',''OP2'',''INFINIT-O'',''Head Office'',''MMC.ONLINECLAIMS'',''Reimbursement'')                
     AND cta.CorpCode is null                                
     ORDER BY ci.ReceivedDate ASC'
 END


IF @AssignTo = ''   --UNASSIGNED/NULL
 BEGIN

    SET @QUERY += '
    WHERE                                                  
    c.ClaimStatus not in (''33'',''22'',''11'',''95'',''00'',''88'',''55'')              
    AND bh.CreatedBy <> ''ELINK''              
    AND vw.CLAIMNO IS NULL              
    AND bh.AssignTo IS NULL
    AND cta.CorpCode is null              
    ORDER BY ci.ReceivedDate ASC'              
 END     



IF (@AssignTo not in ('','OTHER GROUPS'))-- NOT IN "OTHER GROUPS" OR "ASSIGNED/NULL"
 BEGIN
    SET @QUERY += '
    WHERE                                  
    c.ClaimStatus in(''01'',''08'',''19'',''25'',''40'',''51'',''89'',''90'',''91'',''96'',''98'',''99'') 
    AND bh.CreatedBy = <> ''ELINK''          
    AND vw.CLAIMNO IS NULL         
    AND bh.AssignTo = '''+@AssignTo +'''
    AND cta.CorpCode is null              
    ORDER BY ci.ReceivedDate ASC'   
 END 
SET @QUERY += 
    '
		INSERT INTO #OpenClaimCountTemp                                              
    (                                                  
		[RECEIVEDDATE],[PROVIDERCODE], [PROVIDERNAME], [COMPANY], [FUNDING_MGNT], [BATCHNO],[CLAIMNO],          
		[PHYSICIAN_NAME], [PATIENT_NAME],[PAYORLINK_RECEIVED_DATE], [MAXICARE_RECEIVED_DATE], [AVAILMENT_DATE],  
		[CLAIM_STATUS], [CLAIM_TYPE], [PROCESSOR],[NET_PAYABLE_AMOUNT],[NO._OF_DAYS_DELAYED],                                               
		[ASSIGN_TO],[PPD], [PPD_DUE_DATE], [CREDIT_LIMIT],[PRESCRIPTION_TERM],  
		[PRESCRIPTION_CLAUSE],[DAYS_DELAYED_FROM_PT], [PRESCRIBED],[LOA_NO], [LOA_AMOUNT],   
		[BATCH_REMARKS], [AMOUNT_ENCODED]  
     ) 
    SELECT DISTINCT
	RECEIVEDDATE = o.RECEIVEDDATE,
	PROVIDERCODE = o.PROVIDERCODE,
	PROVIDERNAME = o.PROVIDERNAME,
	COMPANY      = cm.CorpName,
	FUNDING_MNGT =
	 CASE 
		WHEN cp.FundingMgnt = ''A'' THEN ''ASO''                
		WHEN cp.FundingMgnt = ''F'' THEN ''Full Risk''  
		ELSE ISNULL(cp.FundingMgnt,'''')                
     END, 
    BATCHNO		            =   o.BATCHNO,
    CLAIMNO		            =   o.CLAIMNO,
    PHYSICIAN_NAME          =   ISNULL(pp.FullName,''''),
	PATIENT_NAME		    =   o.PATIENTNAME,
    PAYORLINK_RECEIVED_DATE =   o.PAYORLINK_RECEIVED_DATE,
    MAXICARE_RECEIVED_DATE  =   o.MAXICARE_RECEIVED_DATE,
    AVAILMENT_DATE          =   o.AVAILMENT_DATE,
    CLAIM_STATUS			=   css.ClaimDesc,
    CLAIMS_TYPE				=   o.CLAIMS_TYPE,
    PROCESSOR               =   ISNULL(o.PROCESSOR,''''),
    NET_PAYABLE_AMOUNT      =   ISNULL(vcs.ApprovedAmt - vcs.Deduction - vcs.ProviderExcess + vcs.MemberExcess,0),
    [NO._OF_DAYS_DELAYED]   =   o.[NO._OF_DAYS_DELAYED],
    ASSIGN_TO			    =   o.ASSIGN_TO,
    PPD						=   o.PPD,
    PPD_DUE_DATE		    =   o.PPD_DUE_DATE,
    CREDIT_LIMIT		    =   o.CREDIT_LIMIT,
    PRESCRIPTION_TERM       =   o.PRESCRIPTION_TERM,
    PRESCRIPTION_CLAUSE		=   ISNULL(pc.PrescriptionClause,''''), 
    DAYS_DELAYED_FROM_PT    =   o.DAYS_DELAYED_FROM_PT, 
    PRESCRIBED              =	o.PRESCRIBED,
	LOA_NO                  =   ISNULL(l.LOA_No,''''),
	LOA_AMOUNT              =   ISNULL(l.AssessedAmt,0),
	BATCH_REMARKS           =   o.BATCH_REMARKS,    
	AMOUNT_ENCODED		    =	o.AMOUNT_ENCODED 
	FROM #TempClaims  o
	INNER JOIN Company cm WITH (NOLOCK) ON cm.CorpCode = o.CORPCODE
	INNER JOIN CompanyPayment cp WITH (NOLOCK) ON o.CORPCODE = cp.CorpCode 
	INNER JOIN FundingMgnt f with(NOLOCK) ON f.FundingMgnt = cp.FundingMgnt
	LEFT JOIN vClaimsSummary vcs WITH(NOLOCK) ON vcs.ClaimNo = o.CLAIMNO2
	LEFT JOIN ClaimStatus css (NOLOCK) ON  o.CLAIMSTATUS = css.ClaimStatus 
	LEFT JOIN ClaimsSummaryGP csg WITH(NOLOCK) ON o.ClaimNo = csg.ClaimNo AND o.PhysicianCode = csg.PhysicianCode  
	LEFT JOIN Physician pp WITH(NOLOCK) ON o.PHYSICIANCODE = pp.PhysicianCode
	LEFT JOIN LOA l WITH(NOLOCK) ON o.CLAIMNO = l.ClaimNo
	LEFT JOIN PrescriptionClause pc WITH(NOLOCK) ON o.PRESCRIPTION_CLASE = pc.RecId 

    INSERT INTO #OpenClaimTemp
    (
   [PROVIDERCODE], [PROVIDERNAME], [COMPANY], [FUNDING_MGNT], [BATCHNO],[CLAIMNO],          
   [PHYSICIAN_NAME], [PATIENT_NAME] ,[PAYORLINK_RECEIVED_DATE] , [MAXICARE_RECEIVED_DATE] , [AVAILMENT_DATE],  
   [CLAIM_STATUS], [CLAIM_TYPE], [PROCESSOR], [NET_PAYABLE_AMOUNT], [NO._OF_DAYS_DELAYED],                                               
   [ASSIGN_TO], [PPD], [PPD_DUE_DATE], [CREDIT_LIMIT], [PRESCRIPTION_TERM],  
   [PRESCRIPTION_CLAUSE], [DAYS_DELAYED_FROM_PT], [PRESCRIBED], [LOA_NO], [LOA_AMOUNT],   
   [BATCH_REMARKS], [BATCH_NOTE], [AMOUNT_ENCODED]
    )                                                  
    VALUES (                                                  
   ''PROVIDERCODE'', ''PROVIDERNAME'', ''COMPANY'', ''FUNDING_MGNT'',''BATCHNO'',''CLAIMNO'',          
   ''PHYSICIAN_NAME'', ''PATIENT_NAME'',''PAYORLINK_RECEIVED_DATE'' , ''MAXICARE_RECEIVED_DATE'' , 
   ''AVAILMENT_DATE'',''CLAIM_STATUS'', ''CLAIM_TYPE'', ''PROCESSOR'', ''NET_PAYABLE_AMOUNT'', 
   ''NO._OF_DAYS_DELAYED'',''ASSIGN_TO'', ''PPD'', ''PPD_DUE_DATE'', ''CREDIT_LIMIT'', ''PRESCRIPTION_TERM'',  
   ''PRESCRIPTION_CLAUSE'', ''DAYS_DELAYED_FROM_PT'', ''PRESCRIBED'', ''LOA_NO'', ''LOA_AMOUNT'',   
   ''BATCH_REMARKS'', ''BATCH_NOTE'', ''AMOUNT_ENCODED''

    )                                                  
                                                   
    INSERT INTO #OpenClaimTemp (                                                                         
    [PROVIDERCODE], [PROVIDERNAME], [COMPANY], [FUNDING_MGNT], [BATCHNO],[CLAIMNO],          
   [PHYSICIAN_NAME], [PATIENT_NAME] ,[PAYORLINK_RECEIVED_DATE] , [MAXICARE_RECEIVED_DATE] , [AVAILMENT_DATE],  
   [CLAIM_STATUS], [CLAIM_TYPE], [PROCESSOR], [NET_PAYABLE_AMOUNT], [NO._OF_DAYS_DELAYED],                                               
   [ASSIGN_TO], [PPD], [PPD_DUE_DATE], [CREDIT_LIMIT], [PRESCRIPTION_TERM],  
   [PRESCRIPTION_CLAUSE], [DAYS_DELAYED_FROM_PT], [PRESCRIBED], [LOA_NO], [LOA_AMOUNT],   
   [BATCH_REMARKS], [BATCH_NOTE], [AMOUNT_ENCODED]
 ) 
	SELECT [PROVIDERCODE], [PROVIDERNAME], [COMPANY], [FUNDING_MGNT], [BATCHNO],[CLAIMNO],          
   [PHYSICIAN_NAME], [PATIENT_NAME] ,[PAYORLINK_RECEIVED_DATE] , [MAXICARE_RECEIVED_DATE] , [AVAILMENT_DATE],  
   [CLAIM_STATUS], [CLAIM_TYPE], [PROCESSOR], [NET_PAYABLE_AMOUNT], [NO._OF_DAYS_DELAYED],                                               
   [ASSIGN_TO], [PPD], [PPD_DUE_DATE], [CREDIT_LIMIT], [PRESCRIPTION_TERM],  
   [PRESCRIPTION_CLAUSE], [DAYS_DELAYED_FROM_PT], [PRESCRIBED], [LOA_NO], [LOA_AMOUNT],   
   [BATCH_REMARKS], [BATCH_NOTE], [AMOUNT_ENCODED]
	FROM #OpenClaimCountTemp o
	ORDER BY o.RECEIVEDDATE ASC
	
	
	   
	SELECT * FROM #OpenClaimTemp   
	DROP TABLE #OpenClaimTemp 
	DROP TABLE #TempClaims'
	 

PRINT @QUERY    
EXEC (@QUERY)
END


  
  
  

ELSE IF @IsCount = 1                                            
 BEGIN  
                     
    SELECT @COUNT = COUNT(o.CLAIMNO)              
    FROM #OpenClaimCountTemp o                                              
    WHERE ASSIGN_TO = @AssignTo              
    AND CLAIM_STATUS = @ClaimStatus              
    AND [NO._OF_DAYS_DELAYED] BETWEEN @DelayDaysFrom AND @DelayDaysTo 
    
    PRINT @COUNT                                  
END    
 
 
       
ELSE IF @IsCount = 2          
 BEGIN        

    SELECT @COUNT = COUNT(o.CLAIMNO)          
    FROM #OpenClaimCountTemp o          
    WHERE ASSIGN_TO = @AssignTo          
    AND [NO._OF_DAYS_DELAYED] BETWEEN @DelayDaysFrom AND @DelayDaysTo           
    
    PRINT @COUNT   
 END          
END


Viewing all articles
Browse latest Browse all 7696

Trending Articles