This way
--dummy Table
declare @cities table(Id int, City varchar(30))
insert into @cities
select '1', 'hyd'
union all
select '2', 'hyd'
union all
select '3', 'hyd'
union all
select '4', 'Bangalore'
union all
select '5', 'Bangalore'
union all
select '6', 'Chennai'
--Actual query
DECLARE @city varchar(30), @id int, @max_id int, @min_id int
declare @tmp table([range] varchar(10), City varchar(30))
DECLARE C1 CURSOR READ_ONLY
FOR
SELECT city
FROM @cities group by city
OPEN C1
FETCH NEXT FROM C1 INTO
@city
WHILE @@FETCH_STATUS = 0
BEGIN
select @max_id = max(id) from @cities where city = @city
select @min_id = min(id) from @cities where city = @city
insert into @tmp
select cast(@min_id as varchar(5)) + '-' + cast(@max_id as varchar(5)), @city
FETCH NEXT FROM C1 INTO
@city
END
CLOSE C1
DEALLOCATE C1
select * from @tmp