Мне нужно переставить ранговые числа, в настоящее время они имеют пробелы, такие как 1, 12, 13, 20, которые мне нужно переставить с 1,2,3,4 
после моего решения оно переставляется, но я считаю, что должна быть намного более короткая версия для перестановки.
Вот что я пробовал:
if object_id('tempdb..#rank') is not null drop table #rank
if object_id('tempdb..#rank2') is not null drop table #rank2
select driver_id, zone_name, zone_rank, 0 as updated into #rank from driver_login where zone_name = 'Out of Zone' order by zone_rank
select * into #rank2 from #rank
select * from #rank2 order by zone_rank
declare @currentRank int
declare @driverId int
while exists(select 1 from #rank2)
begin
set @currentRank = (select min(zone_rank) from #rank2)
set @driverId = (select driver_id from #rank2 where zone_rank = @currentRank)
if(@currentRank != 1 and exists(select 1 from #rank where zone_rank = 1))
begin
declare @minRank int = (select max(zone_rank) from #rank where updated = 1)
update #rank set zone_rank = @minRank + 1, updated = 1 where driver_id = @driverId
end
else if(@currentRank != 1 and not exists(select 1 from #rank where zone_rank = 1))
begin
update #rank set zone_Rank = 1, updated = 1 where driver_id = @driverId
end
delete from #rank2 where driver_id = @driverId
end
select * from #rank order by zone_rank
Вот вывод моего кода: 