重新排序SQL位置列
我有一个带位置栏的待办事项表。(为了简单起见,删除了其他列) 如果有n行,则每次添加一行时,位置都会增加。因此,值可能如下所示:重新排序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开始按顺序排列
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