Převeďte datum narození na název rozsahu a poté vytvořte skupinu podle toho s 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
Při použití dílčího dotazu k převodu data narození na rozsah stačí výpočet provést pouze jednou na řádek, takže by měl fungovat lépe. A je snazší číst.
Také tím, že se vyhneme jednotkám UNION, lze dotaz provést jedním průchodem přes tabulku.