单个查询中的SQL不同聚合

时间:2017-07-25 11:58:19

标签: sql sql-server

我正在尝试找出一个查询,其中有一个表格代表以下内容:

enter image description here

我需要结果来表示最早的开始时间(蓝色),最晚的结束时间(绿色)和午休时间的总和(黄色):

enter image description here

我得到了正确的蓝色和绿色块,但正在努力与黄色聚合。

我的(部分)查询如下:

select
    Name,
    min(StartTime) StartTime,
    max(EndTime) EndTime,
    sum( <please help here with alternative to this aggregation> ) Lunch
from
    SomeTable
group by
    Name

当我使用普通子查询时,SQL会抱怨该列不包含在“group by”或聚合中,并且我不能在聚合中使用子查询。

请指出我对“午餐”专栏的指示。

这是在SQL Server上。

2 个答案:

答案 0 :(得分:4)

假设价值是时间,则总和有点挑战性。我建议转换成分钟:

select Name, min(StartTime) as StartTime, max(EndTime) as EndTime,
       sum(case when activity = 'lunch'
                then datediff(minute, 0, duration)
           end) as lunch_minutes
from SomeTable
group by Name

答案 1 :(得分:2)

会建议你像这样使用案例: 总和(活动='午餐'然后持续时间结束时的情况)为休息