Преобразувайте рождената дата в име на диапазон, след което направете групиране върху това с count:
select
case when age < 18 then 'Under 18'
when age > 50 then 'Over 50'
else '18-50' end as range,
count(*) as count
from (select DATEDIFF(yy, user_dob, GETDATE()) as age from Customer) c
group by case when age < 18 then 'Under 18'
when age > 50 then 'Over 50'
else '18-50' end
Чрез използване на подзаявка за преобразуване на датата на раждане в диапазон, изчислението трябва да се извършва само веднъж на ред, така че трябва да работи по-добре. И е по-лесно за четене.
Освен това, чрез избягване на UNIONs, заявката може да бъде изпълнена с едно преминаване през таблицата.