假设有如下表:名称 排序
小花片 1
西瓜 2
花生米 7
地瓜干 4
酸梅 2
瓜子 5我想把他更新成这样子名称 排序
小花片 1
西瓜 2
花生米 5
地瓜干 3
酸梅 2
瓜子 4也就是说, 把排序那个字段收紧, 顺序不变, 只是中间空闲的数字被后面的补上来
小花片 1
西瓜 2
花生米 7
地瓜干 4
酸梅 2
瓜子 5我想把他更新成这样子名称 排序
小花片 1
西瓜 2
花生米 5
地瓜干 3
酸梅 2
瓜子 4也就是说, 把排序那个字段收紧, 顺序不变, 只是中间空闲的数字被后面的补上来
并一一按照行号来进行更新...
8 9 2 1 -> 3 4 2 1
1 3 -> 1 2
select 名称, row_number() over(order by 排序) as 排序
from tb
--创建临时表
create table #a(id int identity(1,1),name varchar(100), order int)--导入数据
insert into #a(name,order) select name,order from tableselect name,order=(case when order<id then order else id-(select isnull(count(*),0) from (select order from table a where a.id<b.id group by order having count(*)>1 ) c) end) from #a b
修改下--创建临时表
create table #a(id int identity(1,1),name varchar(100), ord int)--导入数据
insert into #a(name,ord ) select name,ord from table order by ord ,nameselect name,ord =(case when ord <id then ord else id-(select isnull(count(*),0) from (select ord from table a where a.id<b.id group by ord having count(*)>1 ) c) end) from #a b