t-sql中的while循环具有起始年和结束年

t-sql中的while循环具有起始年和结束年,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我想通过使用下面的while循环来循环这些年,并获得每年每个月的计数。我如何通过有限的年限来实现这一目标 declare @start_year int=1999 declare @loop_year int declare @end_year int=2015 WHILE (@end_year <2015) BEGIN Select count(*) as rows,month(create_datetime) as month, year(create_datetime) a

我想通过使用下面的while循环来循环这些年,并获得每年每个月的计数。我如何通过有限的年限来实现这一目标

declare @start_year int=1999
declare @loop_year int
declare @end_year int=2015

WHILE (@end_year <2015)
BEGIN

Select    count(*) as rows,month(create_datetime) as month, year(create_datetime) as year
FROM      [table_name]
WHERE     year(create_datetime) =@loop_year
GROUP BY  month(create_datetime),year(create_datetime)
set @loop_year=@start_year+1
END
declare@start\u year int=1999
声明@loop\u year int
宣布@end_year int=2015

WHILE(@end\u year我想你的
WHILE
循环是一团糟。你在声明
@end\u year=2015
然后说
WHILE(@end\u year<2015)
。我想你的意思是
WHILE(@loop\u year

尽管如此,没有理由在这种特殊情况下使用循环。这应该实现相同的结果:

Select count(*) as rows,
    month(create_datetime) as month, 
    year(create_datetime) as year
FROM      [table_name]
WHERE     year(create_datetime) BETWEEN 1999 AND 2014
GROUP BY  month(create_datetime), year(create_datetime)

为什么要在循环中执行此操作?循环/游标效率非常低。最好在WHERE子句中包含年的范围,这样您将获得一个包含count、month和year back的记录集。