重新排序SQL位置列

重新排序SQL位置列,sql,sql-server,Sql,Sql Server,我有一个带位置栏的待办事项表。(为了简单起见,删除了其他列) 如果有n行,则每次添加一行时,位置都会增加。因此,值可能如下所示: Drop Off Kids, 0, 0 Get Groceries, 1, 0 Pickup Kids, 2, 0 Drop off Kids, 0, 0 Get Grocerieis, NULL, 1 Pickup Kids, 1, 0 现在,如果我做了什么,我想把它从表中删除。并递增所有其他位置列,使其从0开始按顺序排列

我有一个带位置栏的待办事项表。(为了简单起见,删除了其他列)

如果有n行,则每次添加一行时,位置都会增加。因此,值可能如下所示:

Drop Off Kids,   0, 0 
Get Groceries,   1, 0 
Pickup Kids,     2, 0
Drop off Kids,  0,    0
Get Grocerieis, NULL, 1
Pickup Kids,    1,    0
现在,如果我做了什么,我想把它从表中删除。并递增所有其他位置列,使其从0开始按顺序排列

也就是说,如果我得到食品杂货,我需要的价值观如下所示:

Drop Off Kids,   0, 0 
Get Groceries,   1, 0 
Pickup Kids,     2, 0
Drop off Kids,  0,    0
Get Grocerieis, NULL, 1
Pickup Kids,    1,    0
SQL有什么方法可以做到这一点吗?
(我正在使用SQL server)

这是一个非常简单的SQL问题,只需查看您的SQL server参考,以获取更新SQL语句:

update todo_table set position = position -1 where position > 1;
update todo_table set position = NULL, JobFinished = 1 where Description='Get Grocerieis'

假设负增量是唯一的问题,而不是重新安排,并且您有一种方法来“分组”您的集合。。然后


更新toDO set position=position-1 where position>@recordDeletedPosition and GroupingMethod=something

虽然它看起来是一个糟糕的设计,但您可以尝试使用此功能的解决方案(SQL Server 2005+)


类似于:嗨,但这并不总是有效的。如果有10个项目,我移除位置8处的项目。然后运行这个查询。这将影响8项下的所有项目。然而,我意识到我可以更新tablre set position=position-1,其中position>(要删除的位置)。。我现在想起来简单多了。谢谢
with cte as (
   select Position, row_number() over (order by position) - 1 as NewPosition
   from tbl
   where JobFinished = 0
)
update tbl
set Position = NewPosition