CREATE TABLE #Temp(ID INT,OrderDate DATE,Amount INT) INSERT INTO #Temp VALUES (1,'2023-02-15',100),(2,'2023-01-18',210),(3,'2022-12-22',120),(4,'2022-10-11',300), (5,'2022-08-17',90),(6,'2022-06-22',200),(7,'2022-02-09',100),(8,'2022-01-03',130) DECLARE @sql_str VARCHAR(MAX) DECLARE @Headings VARCHAR(MAX) SELECT @Headings = ISNULL(@Headings + ',','') + QUOTENAME(OrderQuarter) FROM (SELECT CONCAT(DATEPART(YEAR,OrderDate),'Q',DATEPART(QUARTER,OrderDate)) AS OrderQuarter FROM #Temp WHERE OrderDate BETWEEN DATEADD( QUARTER, DATEDIFF( QUARTER, 0, GETDATE()) - 2, 0) AND GETDATE()) S GROUP BY OrderQuarter ORDER BY OrderQuarter DESC --PRINT @Headings SET @sql_str = ' SELECT * FROM (SELECT Amount,CONCAT(DATEPART(YEAR,OrderDate),''Q'',DATEPART(QUARTER,OrderDate)) AS OrderQuarter FROM #Temp WHERE OrderDate BETWEEN DATEADD( QUARTER, DATEDIFF( QUARTER, 0, GETDATE()) - 2, 0) AND GETDATE() )S PIVOT(SUM(Amount) FOR OrderQuarter IN ('+@Headings+'))P' --PRINT (@sql_str) EXEC (@sql_str)