我有以下疑问:
SELECT COUNT(DATEPART(hh, CallStart)), DATEPART(hh, CallStart) as 'Hour'
FROM PhoneSystemLog
WHERE MONTH(CallStart) = @Month and YEAR(CallStart) = @Year
GROUP BY DATEPART(hh, CallStart)这很好,它会将每小时的呼叫数分组,但我想做的是将12am - 7am之间进行的呼叫分组为一组,而将下午6点-12点进行的呼叫分组为一组,因为在这些时间段进行的呼叫并不多,因此在这些时间段内每个小时的呼叫数似乎没有意义(因为他们不在工作时间)。这个是可能的吗?
发布于 2012-08-01 16:41:36
您可以使用case将小时转换为时段:
select Period
, count(*) as Calls
from (
select case
when datepart(hh, CallStart) between 0 and 7 then '1-7'
when datepart(hh, CallStart) between 18 and 23 then '18-24'
else cast(datepart(hh, CallStart) as varchar(2))
end as Period
from PhoneSystemLog
where MONTH(CallStart) = @Month
and YEAR(CallStart) = @Year
) as SubQueryAlias
group by
Period发布于 2012-08-01 16:41:25
试试这样的东西
select count(DATEPART(hh, CallStart)),
CASE
when DATEPART(hh, callstart) between 0 to 7 then '12:00AM-7AM'
when DATEPART(hh, callstart) between 18 to 23 then '06PM-12AM'
END
as 'hour' from PhoneSystemLog
where MONTH(callstart) = @Month and YEAR(callstart) = @Year
group by
CASE
when DATEPART(hh, callstart) between 0 to 7 then '12:00AM-7AM'
when DATEPART(hh, callstart) between 18 to 23 then '06PM-12AM'
ENDhttps://stackoverflow.com/questions/11755539
复制相似问题