Тоже не красиво, но не зависит от подзапросов (имена таблиц / столбцов взяты из AdventureWorks).Оператор case возвращает 1, если он попадает в ваши критерии, 0 в противном случае - тогда вы просто суммируете результаты:
select sum(case when datediff(day, modifieddate, getdate()) <= 7
then 1 else 0 end) as '7days',
sum(case when datediff(day, modifieddate, getdate()) > 7
and datediff(day, modifieddate, getdate()) <= 14
then 1 else 0 end) as '14days',
sum(case when datediff(day, modifieddate, getdate()) > 14
and datediff(day, modifieddate, getdate()) <= 28
then 1 else 0 end) as '28days'
from sales.salesorderdetail
Редактировать: Обновлена функция datediff - способ ее написания,он будет возвращать отрицательное число (при условии, что измененная дата была в прошлом), в результате чего все элементы попадают под первый случай.Спасибо Андрею М за указание на это