Вы можете сделать это, если присоединитесь к рекурсивному cte, который возвращает в таблицу все часы дня:
with cte as (
select 0 as hour
union all
select hour + 1
from cte
where hour < 23
)
select c.hour Hour, count(*) ProcessQount
from cte c inner join tablename t
on c.hour between datepart(hh, t.[Start]) and datepart(hh, t.[End])
group by c.hour
См. Демонстрационную версию .Результаты:
> Hour | ProcessQount
> ---: | -----------:
> 14 | 2
> 15 | 2
> 16 | 1
Если вы переключитесь на LEFT JOIN
и count([Process_name])
, тогда вы получите результаты для всех часов дня:
> Hour | ProcessQount
.........................
> 12 | 0
> 13 | 0
> 14 | 2
> 15 | 2
> 16 | 1
> 17 | 0
> 18 | 0
.........................