select dt,newDate,sum(state) counts from (
select
convert(varchar(10),createDate,120) as dt,state,
case when createDate>=cast((convert(varchar(10),createDate,120)+'') as datetime)
and createDate<cast((convert(varchar(10),createDate,120)+' 09:00:00.000') as datetime)
then 1
when createDate>=cast((convert(varchar(10),createDate,120)+' 09:00:00.000') as datetime)
and createDate<cast((convert(varchar(10),createDate,120)+' 18:00:00.000') as datetime)
then 2
when createDate>=cast((convert(varchar(10),createDate,120)+' 18:00:00.000') as datetime)
and createDate<cast((convert(varchar(10),createDate,120)+' 23:59:59.999') as datetime)
then 3
else 4 end newDate
from questionInfo ) o
group by dt,newDate
order by dt