USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[PROC_HIGH_CHART] Script Date: 7/4/2019 11:35:48 AM ******/ DROP PROCEDURE [dbo].[PROC_HIGH_CHART] GO /****** Object: StoredProcedure [dbo].[PROC_HIGH_CHART] Script Date: 7/4/2019 11:35:48 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[PROC_HIGH_CHART] ( @flag VARCHAR(20) ='high-chart' ,@country VARCHAR(30) = NULL ,@User VARCHAR(50) ) AS SET NOCOUNT ON; SET XACT_ABORT ON; BEGIN DECLARE @DATE VARCHAR(10),@FirstMonthStart DATE , @FirstMontEnd DATETIME , @SecondMonthStart DATE , @SecondMonthEnd DATETIME , @ThirdMonthStart DATE , @ThirdMonthEnd DATETIME , @FourthdMonthStart DATE , @FourthMonthEnd DATETIME , @FifthdMonthStart DATE , @FifthMonthEnd DATETIME , @LastMonthStart DATE , @LastMonthEnd DATETIME , @todayDate DATETIME , @previousSixMonthDate Date IF @flag = 'country' BEGIN SELECT @FirstMonthStart = DATEADD(mm,-5,DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) SELECT TOP 5 pCountry, count(10) [count] FROM remittran (NOLOCK) WHERE approvedDate between @FirstMonthStart and GETDATE() AND tranStatus <> 'CANCEL' GROUP BY pcountry ORDER BY [count] DESC END IF @flag = 'high-chart' BEGIN IF (SELECT dbo.FNAHasRight(@User,'90100000') )='N' RETURN SELECT @todayDate = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))+' 23:59:59' SELECT @previousSixMonthDate = DATEADD(mm,-5,DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))) SELECT @FirstMonthStart = DATEADD(mm,-5,DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) SELECT @SecondMonthStart = DATEADD(mm,1,@FirstMonthStart) SELECT @ThirdMonthStart = DATEADD(mm,2,@FirstMonthStart) SELECT @FourthdMonthStart = DATEADD(mm,3,@FirstMonthStart) SELECT @FifthdMonthStart = DATEADD(mm,4,@FirstMonthStart) SELECT @LastMonthStart = DATEADD(mm,5,@FirstMonthStart) SELECT @LastMonthEnd = DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)) +' 23:59:59' SELECT @FifthMonthEnd = DATEADD(mm,-1,@LastMonthEnd) SELECT @FourthMonthEnd = DATEADD(mm,-2,@LastMonthEnd) SELECT @ThirdMonthEnd = DATEADD(mm,-3,@LastMonthEnd) SELECT @SecondMonthEnd = DATEADD(mm,-4,@LastMonthEnd) SELECT @FirstMontEnd = DATEADD(mm,-5,@LastMonthEnd) IF OBJECT_ID('tempdb..#tempRemit') IS NOT NULL DROP TABLE #tempRemit SELECT approvedDate,pCountry into #tempRemit FROM remittran(NOLOCK) where approvedDate between @FirstMonthStart and GETDATE() AND tranStatus <> 'CANCEL' IF OBJECT_ID('tempdb..#TEMPCOUNTRY') IS NOT NULL DROP TABLE #TEMPCOUNTRY SELECT TOP 5 pCountry, count(10) [count] INTO #TEMPCOUNTRY FROM #tempRemit(nolock) --WHERE approvedDate BETWEEN @FirstMonthStart and GETDATE() GROUP BY pcountry ORDER BY [count] DESC DECLARE @cntCountry INT; SET @cntCountry = 1 WHILE @cntCountry <= 5 BEGIN SELECT TOP 1 @country = pCountry FROM #TEMPCOUNTRY(nolock) ORDER BY [count] DESC DELETE FROM #TEMPCOUNTRY WHERE pCountry = @country SET @cntCountry = @cntCountry + 1 IF OBJECT_ID('tempdb..#TEMPJAN') IS NOT NULL DROP TABLE #TEMPJAN IF OBJECT_ID('tempdb..#TEMPFEB') IS NOT NULL DROP TABLE #TEMPFEB IF OBJECT_ID('tempdb..#TEMPMAR') IS NOT NULL DROP TABLE #TEMPMAR IF OBJECT_ID('tempdb..#TEMPAPR') IS NOT NULL DROP TABLE #TEMPAPR IF OBJECT_ID('tempdb..#TEMPMAY') IS NOT NULL DROP TABLE #TEMPMAY IF OBJECT_ID('tempdb..#TEMPJUNE') IS NOT NULL DROP TABLE #TEMPJUNE SELECT DAY(approveddate) [day], COUNT(1) [count] INTO #TEMPJAN FROM #tempRemit (nolock) WHERE approvedDate BETWEEN @FirstMonthStart AND @FirstMontEnd AND pCountry = @country GROUP BY DAY(approveddate) ORDER BY [day] SELECT DAY(approveddate) [day], COUNT(1) [count] INTO #TEMPFEB FROM #tempRemit (nolock) WHERE approvedDate BETWEEN @SecondMonthStart AND @SecondMonthEnd AND pCountry = @country GROUP BY DAY(approveddate) ORDER BY [day] SELECT DAY(approveddate) [day], COUNT(1) [count] INTO #TEMPMAR FROM #tempRemit (nolock) WHERE approvedDate BETWEEN @ThirdMonthStart AND @ThirdMonthEnd AND pCountry = @country GROUP BY DAY(approveddate) ORDER BY [day] SELECT DAY(approveddate) [day], COUNT(1) [count] INTO #TEMPAPR FROM #tempRemit (nolock) WHERE approvedDate BETWEEN @FourthdMonthStart AND @FourthMonthEnd AND pCountry = @country GROUP BY DAY(approveddate) ORDER BY [day] SELECT DAY(approveddate) [day], COUNT(1) [count] INTO #TEMPMAY FROM #tempRemit (nolock) WHERE approvedDate BETWEEN @FifthdMonthStart AND @FifthMonthEnd AND pCountry = @country GROUP BY DAY(approveddate) ORDER BY [day] SELECT DAY(approveddate) [day], COUNT(1) [count] INTO #TEMPJUNE FROM #tempRemit (nolock) WHERE approvedDate BETWEEN @LastMonthStart AND @todayDate AND pCountry = @country GROUP BY DAY(approveddate) ORDER BY [day] DECLARE @HIGHCHART TABLE([DAY] INT, FirstMonth INT, SecondMonth INT, ThirdMonth INT, FourthMonth INT, FifthMonth INT, SixthMonth INT) DECLARE @cnt INT; SET @cnt = 1 WHILE @cnt <=32 BEGIN INSERT INTO @HIGHCHART SELECT @CNT, 0,0,0,0,0,0 SET @cnt = @cnt + 1 END UPDATE T2 SET T2.FirstMonth = T1.cumulative FROM (SELECT t1.[day], t1.[count], SUM(ISNULL(t2.[count], 0)) as cumulative FROM #TEMPJAN t1 (nolock) INNER JOIN #TEMPJAN t2 (nolock) on t1.[day] >= t2.[day] GROUP BY t1.[day], t1.[count] ) T1 INNER JOIN @HIGHCHART T2 ON T2.[DAY] = T1.[day] UPDATE T2 SET T2.SecondMonth = T1.cumulative FROM (SELECT t1.[day], t1.[count], SUM(ISNULL(t2.[count], 0)) as cumulative FROM #TEMPFEB t1 (nolock) INNER JOIN #TEMPFEB t2 (nolock) on t1.[day] >= t2.[day] GROUP BY t1.[day], t1.[count]) T1 INNER JOIN @HIGHCHART T2 ON T2.[DAY] = T1.[day] UPDATE T2 SET T2.ThirdMonth = T1.cumulative FROM (SELECT t1.[day], t1.[count], SUM(ISNULL(t2.[count], 0)) as cumulative FROM #TEMPMAR t1 (nolock) INNER JOIN #TEMPMAR t2 (nolock) on t1.[day] >= t2.[day] GROUP BY t1.[day], t1.[count]) T1 INNER JOIN @HIGHCHART T2 ON T2.[DAY] = T1.[day] UPDATE T2 SET T2.FourthMonth = T1.cumulative FROM (SELECT t1.[day], t1.[count], SUM(ISNULL(t2.[count], 0)) as cumulative FROM #TEMPAPR t1 (nolock) INNER JOIN #TEMPAPR t2 (nolock) on t1.[day] >= t2.[day] GROUP BY t1.[day], t1.[count]) T1 INNER JOIN @HIGHCHART T2 ON T2.[DAY] = T1.[day] UPDATE T2 SET T2.FifthMonth = T1.cumulative FROM (SELECT t1.[day], t1.[count], SUM(ISNULL(t2.[count], 0)) as cumulative FROM #TEMPMAY t1 (nolock) INNER JOIN #TEMPMAY t2 (nolock) on t1.[day] >= t2.[day] GROUP BY t1.[day], t1.[count]) T1 INNER JOIN @HIGHCHART T2 ON T2.[DAY] = T1.[day] UPDATE T2 SET T2.SixthMonth = T1.cumulative FROM (SELECT t1.[day], t1.[count], SUM(ISNULL(t2.[count], 0)) as cumulative FROM #TEMPJUNE t1 (nolock) INNER JOIN #TEMPJUNE t2 (nolock) on t1.[day] >= t2.[day] GROUP BY t1.[day], t1.[count]) T1 INNER JOIN @HIGHCHART T2 ON T2.[DAY] = T1.[day] SELECT @country countryName IF OBJECT_ID('tempdb..#tempdata') IS NOT NULL DROP TABLE #tempdata SELECT * INTO #tempdata FROM @HIGHCHART DECLARE @sql VARCHAR(max); SET @sql = 'SELECT [DAY]' +',FirstMonth AS ' + DATENAME(MONTH,@FirstMonthStart) +',SecondMonth AS ' + DATENAME(MONTH,@SecondMonthStart) + ',ThirdMonth AS ' + DATENAME(MONTH,@ThirdMonthEnd) +',FourthMonth AS ' + DATENAME(MONTH,@FourthdMonthStart) + ',FifthMonth AS ' + DATENAME(MONTH,@FifthdMonthStart) +',SixthMonth AS ' + DATENAME(MONTH,@LastMonthStart) + ' from #tempdata' --PRINT (@sql) EXEC (@sql) SET @cnt = @cnt + 1 DELETE FROM @HIGHCHART END END END GO