Это не прямой ответ, но код не может быть размещен в удобочитаемом виде в комментарии, поэтому я думаю, что здесь все должно быть в порядке:
Не зацикливайтесь в SP, лучше используйте CTEчтобы сгенерировать нужные вам числа.
DECLARE @YearToGet int;
SET @YearToGet = 2005;
WITH Years AS (
SELECT DATEPART(year, GETDATE()) [Year]
UNION ALL
SELECT [Year]-1 FROM Years WHERE [Year]>@YearToGet
)
SELECT * FROM Years -- join here with your query
OPTION (MAXRECURSION 0) -- this avoids hitting the recursion limit in the CTE
Редактировать : Попробуйте это
WITH Years
AS (
SELECT DATEPART(year, GETDATE()) [Year]
UNION ALL
SELECT [Year]-1
FROM Years
WHERE [Year] > @YearToGet
)
SELECT DIVISION, DYYYY, SUM(APRICE) AS Sales, SUM(PARTY) AS PAX, SUM(NetAmount) AS NetSales, SUM(InsAmount) AS InsSales, SUM(CancelRevenue) AS CXSales, SUM(OtherAmount) AS OtherSales, SUM(CXVALUE) AS CXValue
FROM dbo.B101BookingsDetails
JOIN Years yr ON DYYYY = yr.[Year]
WHERE Booked <= CONVERT(int, DATEADD(year, DYYYY-YEAR(GETDATE()), DATEADD(day, DATEDIFF(day, 2, GETDATE()), 0)))
GROUP BY DYYYY, DIVISION
ORDER BY DIVISION, DYYYY
OPTION (MAXRECURSION 0);