5 sql t-sql sql-server sorting
我有一个包含多行的表和一个名为“order”的列,该列从 1 到 XX 取决于我的表中有多少行。
问题是,如果我想将“顺序”1 的行移动到位置 3,我需要其他行中的另一个“顺序”来重新排列它们自己。
例如,如果我用“3”移动“order”1,则后面的所有数字都必须增加1,而第二个现在必须是“order”1。
我希望我说清楚了。
感谢您的帮助 !
编辑/样本数据
Name | Order
Line 1 | 1
Line 2 | 2
Line 3 | 3
Line 4 | 4
Run Code Online (Sandbox Code Playgroud)
如果我用 4 而不是 1 更新“第 1 行”的顺序,我希望其他人也更新他们的顺序!
Name | Order
Line 2 | 1
Line 3 | 2
Line 4 | 3
Line 1 | 4
Run Code Online (Sandbox Code Playgroud)
如果我用 1 更新“第 4 行”的顺序,也会发生同样的情况!
Name | Order
Line 4 | 1
Line 1 | 2
Line 2 | 3
Line 3 | 4
Run Code Online (Sandbox Code Playgroud)
例如,如果我用 2 更新“第 3 行”的顺序,也会发生同样的情况!
Name | Order
Line 1 | 1
Line 3 | 2
Line 2 | 3
Line 4 | 4
Run Code Online (Sandbox Code Playgroud)
您可以使用一个CASE声明:
UPDATE ...
SET [Order] = [Order] + CASE
WHEN [Order] = @OLDPOS THEN @NEWPOS - @OLDPOS
WHEN @NEWPOS > @OLDPOS AND [Order] > @OLDPOS AND [Order] <= @NEWPOS THEN -1
WHEN @NEWPOS < @OLDPOS AND [Order] < @OLDPOS AND [Order] >= @NEWPOS THEN 1
ELSE 0
END
Run Code Online (Sandbox Code Playgroud)
ROW_NUMBER()间隙和重叠可以通过添加上述内容来修复。
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |