假设有如下表:名称    排序
小花片  1
西瓜    2
花生米  7
地瓜干  4
酸梅    2
瓜子    5我想把他更新成这样子名称    排序
小花片  1
西瓜    2
花生米  5
地瓜干  3
酸梅    2
瓜子    4也就是说, 把排序那个字段收紧, 顺序不变, 只是中间空闲的数字被后面的补上来

解决方案 »

  1.   

    类似于先使用select按照"排序"列出来, 
    并一一按照行号来进行更新...
      

  2.   

    例如1 3 4我想变成 1 2 3也就是把空闲的数字补起来, 但是这个顺序不能变...1 5 2 4 7 -> 1 4 2 3 5
    8 9 2 1   -> 3 4 2 1
    1 3       -> 1 2
      

  3.   


    select 名称, row_number() over(order by  排序) as  排序
      from tb
      

  4.   


    --创建临时表
    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
      

  5.   


    修改下--创建临时表
    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