我正在尝试使用SQL创建每月的“预测”流程。我已经为Jan创建了一个查询,希望查看是否有可能在每个额外的月份中循环并将结果存储在Temporary表中。
逻辑上,我想将@DMonth变量设置为1,运行查询,将结果存储/追加到临时表中,循环...
将@DMonth变量设置为2,运行查询,将结果存储/追加到临时表中,循环...
等。依次设置@DMonth直到它达到12,然后退出循环。
查询中的示例变量:
Declare @DMonth int;
set @DMonth = 1
我认为我需要将@DMonth变量的Setting设置为Loop。
答案 0 :(得分:0)
尚不清楚您真正想在循环中做什么,但是这是如何循环并在临时表中保存月份的方法:
CREATE TABLE #temp(mon int);
Declare @StartDate DATETIME = '2016-09-01',
@EndDate DATETIME = '2017-01-31'
-- Now you have 12 months and you can use below query to loop through each month starting from January
WHILE (@StartDate <= @EndDate)
BEGIN
DECLARE @Month INT = Month(@StartDate) -- At the start of loop @Month is equal to 9
-- Save @Month to temp table in each repeat
INSERT INTO #temp (mon)
SELECT @Month;
SET @StartDate = DATEADD(MONTH, 1, @StartDate); -- this line adds 1 value to @Month after first loop @Month will be 10
END
如果您想从@StartDate
(2016年9月)开始循环,然后在@EndDate
(2017年1月)结束循环,上述查询将执行完全相同的过程。但是,如果要将@StartDate
更改为2016-01-01
,将@EndDate
更改为2016-12-31
,请使用以下查询:
CREATE TABLE #temp(mon int);
Declare @StartDate DATETIME = DATEADD(MONTH, -8, '2016-09-01'); -- It will set @StartDate to '2016-01-01'
Declare @EndDate DATETIME = DATEADD(MONTH, 11, DATEADD(YEAR, -1, '2017-01-31')); -- It will set @EndDate to '2016-12-31'
-- Now you have 12 months and you can use below query to loop through each month starting from January
WHILE (@StartDate <= @EndDate)
BEGIN
DECLARE @Month INT = Month(@StartDate) -- At the begining @Month is equal to 1
-- Save @Month to temp table in each repeat
INSERT INTO #temp (mon)
SELECT @Month;
SET @StartDate = DATEADD(MONTH, 1, @StartDate); -- this line adds 1 value to @Month after first loop @Month will be 2
END
答案 1 :(得分:0)
当然,您可以在sql中循环。语法略有不同但相似,如果您了解基本编码,就可以轻松理解它,但是我们只能在sql中使用while循环。 语法如下所示。 while循环。我们基本上使用
当(n