t-sql中的while循环具有起始年和结束年
我想通过使用下面的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
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的记录集。