一个查询以一定顺序更新表

时间:2019-07-02 11:53:35

标签: sql sql-server

让我说一下下表:

id      LISTORDER   ARTIKEL_NR
209321  1           F99-           
219268  2           F99-0013663    
209323  3           FLB-0000035    
209324  4           FLB-0000142    
209325  5           INK-0000012    
209322  6           FLB-0000019    
209326  7           INK-0000003    
209327  8           ENE-1          
209328  9           ENE-2          
209329  10          CON-0000028  

现在,我想将LISTORDER列更改为id列中的数字,以使结果为:

id      LISTORDER   ARTIKEL_NR
209321  209321      F99-           
219268  209322      F99-0013663    
209323  209323      FLB-0000035    
209324  209324      FLB-0000142    
209325  209325      INK-0000012    
209322  209326      FLB-0000019    
209326  209327      INK-0000003    
209327  209328      ENE-1          
209328  209329      ENE-2          
209329  219268      CON-0000028

因此,顺序保持不变,但我在其他顺序中使用了原始ID号。一个查询有可能吗? 否则,我必须保存按id排序的查询的结果,然后为listorder的每一行进行更新,但是按listorder的顺序进行更新。

类似的东西:

UPDATE table SET listorder = (select id from table order by listorder)

1 个答案:

答案 0 :(得分:1)

我认为下面的查询应该对您有用。

;with cte as(
      Select RN=ROW_NUMBER() over(order by id),id from #YourTable
)
update t set t.LISTORDER=c.id 
from cte c join #YourTable t on c.RN=t.LISTORDER