Hello All,Can i improve following code.CREATE PROCEDURE Sales (@StartDate AS VarChar(10), @EndDate AS VarChar(10))AS CREATE TABLE #JobLaserMail( JobNo VARCHAR(10) PRIMARY KEY, TotLaserImages INT, TotalMailpacks INT)CREATE TABLE #JobAmount( JobNo VARCHAR(10) PRIMARY KEY, JobAmount INT)CREATE TABLE #AM( JobNo VARCHAR(10), CompanyID INT, ResID INT, Name VARCHAR(50), RelationTypeID VARCHAR(4))CREATE TABLE #AE( JobNo VARCHAR(10), CompanyID INT, ResID INT, Name VARCHAR(50), RelationTypeID VARCHAR(4))--Getting CDS Relation AM for each JobINSERT INTO #AMSELECT ContractID AS JobNo,CompanyID,Relation.ResID,LTRIM(RTRIM(Res.Name)),RelationTypeIDFROM Relation,Res WHERE Relation.ResID=Res.ResIDAND ContractID IN(SELECT DISTINCT JobNo FROM JobInvoice WHERE InvoiceDate >= CONVERT(DATETIME, @StartDate, 103)AND InvoiceDate <= CONVERT(DATETIME, @EndDate, 103)+1) AND RelationTypeID='CR4'--Getting CDS Relation AE for each JobINSERT INTO #AESELECT ContractID AS JobNo,CompanyID,Relation.ResID,LTRIM(RTRIM(Res.Name)),RelationTypeIDFROM Relation,Res WHERE Relation.ResID=Res.ResIDAND ContractID IN(SELECT DISTINCT JobNo FROM JobInvoice WHERE InvoiceDate >= CONVERT(DATETIME, @StartDate, 103)AND InvoiceDate <= CONVERT(DATETIME, @EndDate, 103)+1) AND RelationTypeID='CR5'--Getting Total Laser imasges and mailpacks for each JobINSERT INTO #JobLaserMailSELECT JobInvoice.JobNo,sum(ReconcileJobProductComponent.ActLaserTotalA4Images) AS 'TotLaserImages', sum(ReconcileJobProductComponent.ActMailMachineMailPacks) AS 'TotalMailpacks' FROM JobInvoice LEFT OUTER JOIN ReconcileJobProductComponent on JobInvoice.JobNo=ReconcileJobProductComponent.JobNoWHERE JobInvoice.InvoiceDate >= CONVERT(DATETIME, @StartDate, 103)AND JobInvoice.InvoiceDate <= CONVERT(DATETIME, @EndDate, 103)+1GROUP BY JobInvoice.JobNo--Getting Total value of each JobINSERT INTO #JobAmountSELECT JobInvoice.JobNo, sum(SOP.DOCAMNT) AS 'JobAmount' FROM JobInvoice LEFT JOIN SOP302 AS SOP on JobInvoice.InvoiceNo=SOP.SOPNUMBE WHERE JobInvoice.InvoiceDate >= CONVERT(DATETIME, @StartDate, 103)AND JobInvoice.InvoiceDate <= CONVERT(DATETIME, @EndDate, 103)+1GROUP BY JobInvoice.JobNoORDER BY JobInvoice.JobNoCREATE TABLE #WorkingTable (JobNo VARCHAR(10),CompanyID INT,Name VARCHAR(50),list VARCHAR(1000))INSERT INTO #WorkingTable (JobNo,CompanyID,Name)SELECT JobNo,CompanyID,NameFROM #AEORDER BY JobNo,NameDECLARE@list VARCHAR(1000),@lastJobNo VARCHAR(10),@lastCompanyID INTSELECT@list = '',@lastJobNo = '',@lastCompanyID = 0UPDATE#WorkingTableSET@list = list = CASEWHEN @lastJobNo <> JobNo OR @lastCompanyID<>CompanyID THEN Nameelse @list + ',' + Nameend,@lastJobNo = JobNo,@lastCompanyID=CompanyIDCREATE TABLE #final (JobNo VARCHAR(10), CompanyID int,AM VARCHAR(1000), AE VARCHAR(1000))INSERT INTO #finalSELECT #WorkingTable.JobNo, #WorkingTable.CompanyID,max(#AM.Name), max(list) as listFROM #WorkingTable LEFT JOIN #AM ON #WorkingTable.JobNo=#AM.JobNo GROUP BY #WorkingTable.JobNo,#WorkingTable.CompanyIDORDER BY #WorkingTable.JobNo,#WorkingTable.CompanyIDUPDATE #finalSet AM = CASE WHEN CHARINDEX(',',AE)>0 THEN LEFT(AE,CHARINDEX(',',AE)-1) else AE end, AE = CASE WHEN CHARINDEX(',',AE)>0 THEN RIGHT(AE,LEN(AE) - CHARINDEX(',',AE)) else NULL endFROM #finalWhere AM is NULLSELECT DISTINCT JobInvoice.JobNo, Job.JobName, Company.CompanyName, #JobAmount.JobAmount, #JobLaserMail.TotLaserImages,#JobLaserMail.TotalMailpacks, #final.AM,#final.AEFROM JobInvoice LEFT JOIN Job ON JobInvoice.JobNo=Job.JobNo LEFT JOIN #JobAmount ON JobInvoice.JobNo=#JobAmount.JobNo LEFT JOIN #JobLaserMail ON JobInvoice.JobNo=#JobLaserMail.JobNo RIGHT JOIN #final ON JobInvoice.JobNo=#final.JobNo INNER JOIN Company on #final.CompanyID=Company.CompanyID WHERE JobInvoice.InvoiceDate >= CONVERT(DATETIME, @StartDate, 103)AND JobInvoice.InvoiceDate <= CONVERT(DATETIME, @EndDate, 103)+1ORDER BY #Final.AM, Company.CompanyName, JobInvoice.JobNoDROP TABLE #AM DROP TABLE #AEDROP TABLE #JobLaserMailDROP TABLE #JobAmountDROP TABLE #finalDROP TABLE #WorkingTableThanksmk_garg