It's not as hard as it might seem, you just have to join on a table describing the age groups, here's an example:declare @Tickets table(Born smalldatetime)insert into @Tickets(Born) values('1978-12-11')insert into @Tickets(Born) values('1982-02-15')insert into @Tickets(Born) values('1989-10-02')insert into @Tickets(Born) values('1985-07-17')insert into @Tickets(Born) values('2000-01-15')insert into @Tickets(Born) values('1965-11-30')declare @AgeGroup table(YearFrom int, YearTo int)insert into @AgeGroup values(0, 9)insert into @AgeGroup values(10, 19)insert into @AgeGroup values(20, 29)insert into @AgeGroup values(30, 39)insert into @AgeGroup values(40, 49)insert into @AgeGroup values(50, 59)insert into @AgeGroup values(60, 200)select T.Born, cast(A.YearFrom as varchar(3)) + '-' + cast(A.YearTo as varchar(2)) AgeGroupfrom @Tickets T inner join @AgeGroup A on datediff(year, T.Born, getdate()) between A.YearFrom and A.YearToRe the issue of an age column, adding that and keeping it updated would be a denormalization, so it's not a good idea. However, you could use a computed column for the sake of convenience:declare @Tickets table(Born smalldatetime, Age as datediff(year, Born, getdate()))