首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -带子选择的Group By?

SQL -带子选择的Group By?
EN

Stack Overflow用户
提问于 2012-08-01 16:37:40
回答 2查看 2.1K关注 0票数 0

我有以下疑问:

代码语言:javascript
复制
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点进行的呼叫分组为一组,因为在这些时间段进行的呼叫并不多,因此在这些时间段内每个小时的呼叫数似乎没有意义(因为他们不在工作时间)。这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 16:41:36

您可以使用case将小时转换为时段:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2012-08-01 16:41:25

试试这样的东西

代码语言:javascript
复制
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'
    END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11755539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档