try this onedeclare @t table (tran_datetime datetime, viewss int)insert into @t select '2009-05-28 00:00:00.000', 1insert into @t select '2009-05-28 04:00:08.000', 2insert into @t select '2009-06-29 06:12:08.000', 10 insert into @t select '2009-06-28 11:00:08.000', 34insert into @t select '2009-06-30 16:00:08.000', 20select convert(varchar(32),cast(t.date as datetime),108) +'-'+ convert(varchar(32),cast(t.date1 as datetime),108) as date ,sum( viewss ) as sumviews from(select CAST(convert(varchar(32),tran_datetime,108) AS DATETIME) as date,viewss from @t)s inner join (select '1/1/1900 0:00' as date,'1/1/1900 4:00' as date1 UNION ALLselect '1/1/1900 4:00','1/1/1900 8:00' UNION ALLselect '1/1/1900 8:00','1/1/1900 12:00' UNION ALLselect '1/1/1900 12:00','1/1/1900 16:00' UNION ALLselect '1/1/1900 16:00','1/1/1900 20:00') t on s.date between t.date and t.date1group by t.date,t.date1