Przekształć datę urodzenia na nazwę zakresu, a następnie pogrupuj ją z liczbą:
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
Korzystając z podzapytania do konwersji daty urodzenia na zakres, obliczenie należy wykonać tylko raz na wiersz, więc powinno działać lepiej. I jest łatwiejszy do odczytania.
Ponadto, unikając UNION, zapytanie może zostać wykonane w jednym przejściu nad tabelą.