declare @t table(id int,num int)
insert @t select 100,10
union all select 101,10
union all select 102,10
union all select 103,20
union all select 104,20
union all select 105,30
union all select 106,30
union all select 107,30
union all select 108,40
declare @i int,@a int
set @a=0
set @i=0
update @t set @a=case when num<>@i then id else @a end ,@i=case when num<>@i then num else @i end,num=case when num=@i then @a else id end,@i=num
create table T(id int, num int)
insert T select 100, 10
union all select 101, 10
union all select 102, 10
union all select 103, 20
union all select 104, 20
union all select 105, 30
union all select 106, 30
union all select 107, 30
union all select 108, 40
update T set num=B.id
from(
select id=min(id), num from T group by num) B
where T.num=B.num
select * from T
--result
id num
----------- -----------
100 100
101 100
102 100
103 103
104 103
105 105
106 105
107 105
108 108
create table T(id int, num int)
insert T select 100, 10
union all select 101, 10
union all select 102, 10
union all select 103, 20
union all select 104, 20
union all select 105, 30
union all select 106, 30
union all select 107, 30
union all select 108, 40
update T set num=B.id
from(
select id=min(id), num from T group by num) B
where T.num=B.num