DECLARE @TODAY DATETIME
SET @TODAY = GETDATE()
DECLARE @YEAR INT
DECLARE @WEEK INT
SET @YEAR = YEAR(@TODAY)
SET @WEEK = DATEPART(WK,@TODAY)
CREATE TABLE #TIMEFILTER([YEAR] int NULL, [QRT] nvarchar(50) NULL, [MONTH] nvarchar(50) NULL, [WEEK] nvarchar(50) NULL)
WHILE(@YEAR>(YEAR(@TODAY) - 5))
BEGIN
WHILE(@WEEK > 0)
BEGIN
INSERT INTO #TIMEFILTER SELECT @YEAR, 'Q' + CAST(CASE WHEN MONTH(DATEADD(wk,@WEEK,CAST(@YEAR AS NVARCHAR(4)) + '/01/01')) < 4 THEN 1 WHEN MONTH(DATEADD(wk,@WEEK,CAST(@YEAR AS NVARCHAR(4)) + '/01/01')) < 7 THEN 2 WHEN MONTH(DATEADD(wk,@WEEK,CAST(@YEAR AS NVARCHAR(4)) + '/01/01')) < 10 THEN 3 ELSE 4 END AS NVARCHAR(4)),DATENAME(month, DATEADD(wk,@WEEK,CAST(@YEAR AS NVARCHAR(4)) + '/01/01')),'W' + CAST(@WEEK AS NVARCHAR(4))
SET @WEEK = @WEEK - 1
END
SET @WEEK = 52
SET @YEAR = @YEAR - 1
END
SELECT * FROM #TIMEFILTER;
DROP TABLE #TIMEFILTER;