【发布时间】:2011-01-04 21:33:25
【问题描述】:
我需要帮助在我的存储过程中构建一个循环,基本上我也希望它从 2005 年到今年循环。
ALTER PROCEDURE [dbo].[testt1]
as
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 TOP (100) PERCENT 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 AS B101BookingsDetails
WHERE Booked <= CONVERT(int,DateAdd(year, (SELECT * FROM Years) - Year(getdate()), DateAdd(day, DateDiff(day, 2, getdate()), 0)))
and DYYYY = @YearToGet
GROUP BY DYYYY, DIVISION
ORDER BY DIVISION, DYYYY
OPTION (MAXRECURSION 0) -- this avoids hitting the recursion limit in the CTE
我真的可以使用一个存储过程网站,它比简单的选择语句更详细
【问题讨论】:
-
我的循环不起作用,我想多次运行 select 语句,直到年份达到当前年份
-
首先:为什么不直接使用
YEAR(GETDATE())而不是奇怪的 DATENAME() 方法.....另外:你永远不会更新你的@YearToGet或year值 - 我认为这会以非循环或无限循环结束...... -
那么你真的想在这里做什么?尝试解释您要实现的目标.....仅从代码的 sn-p 就不清楚了....
-
您遇到了什么错误?
-
哦该死的哈哈我智障,我的主要问题是我在开始时遇到语法错误
标签: sql sql-server-2005 stored-procedures