//
create function[dbo].[func_datelist](@starttime datetime,@endtime datetime,@type varchar(20))
returns @t table(id int,hisdate varchar(20))as
begin
declare @index int
declare @tempstarttime datetime
declare @tempendtime datetime
set @index=0set @tempstarttime=@starttime
set @tempendtime=@endtime
while(@tempstarttime<=@tempendtime)
begin
insert @t(id,hisdate)values(@index+1,convert(varchar(20),@tempstarttime,120))if @type ='s'--秒
Begin set @tempstarttime=DATEADD(SECOND,1,@tempstarttime) End
elseif @type ='n'--分
Begin set @tempstarttime=DATEADD(MINUTE,1,@tempstarttime) End
elseif @type ='h'--时
Begin set @tempstarttime=DATEADD(HOUR,1,@tempstarttime) End
elseif @type='d'--日
Begin set @tempstarttime=DATEADD(DAY,1,@tempstarttime) End
elseif @type='m'--月
Begin set @tempstarttime=DATEADD(MONTH,1,@tempstarttime) End
Else if @type='y'--年
Begin set @tempstarttime=DATEADD(year,1,@tempstarttime) End
else
Begin set @tempstarttime=@tempendtime End
set @index=@index+1
end
return
end
以月为例
// 以月为例
select hisdates,COUNT(bb.xxxxx)as value from(select left(hisdate,7)as hisdates from dbo.func_datelist(DATEADD(year,-1,GETDATE()),GETDATE(),'m')) dates
FULLOUTERJOIN
bb
ONLEFT(CONVERT(varchar(20), bb.CASE_DATE,120),7)= hisdates
GROUPBY hisdates