在单个SQL命令中更新每个具有不同值的可变数量的行?

时间:2011-08-21 16:49:30

标签: sql sql-server

我有一个像这样的有序数据表

ID   ORDER
12     1
13     2
14     3
15     4
...
200    189
201    190
...

我希望能够更新他们的几个或所有“订单”。 我该怎么办?

例如,我可能会在ID = 12和ID = 13之间切换顺序,所以它就像

ID   ORDER
12     2
13     1
14     3
15     4
...

这只是一个简单的UPDATE TABLE SET ORDER=1 WHERE ID=13 SET ORDER=2 WHERE ID=12

但如果我想将ID = 200一直移到顶部,那么......

ID   ORDER
12     2
13     3
14     4
15     5
...
200    190
201    1
...  

然后一切都要更新..?我怎么做?有没有更好的办法?小数?

编辑:我正在使用MSSQL btw

编辑:使用说明:我有一个包含很长URL链接列表的表,这些链接的顺序很重要。我希望能够重新排列他们的订单。我有一个网页,从数据库中检索该列表,显示名称作为无序列表,我可以重新排列该列表上的项目。我坚持如何将新订购的清单的订单更新到数据库中。

4 个答案:

答案 0 :(得分:3)

要将Id 200移到顶部,您必须执行以下操作:

1)获取在Id 200之前订购的所有商品并将订单增加1

update MyTable 
set Order = Order + 1 
where Order < (select Order from MyTable where Id = 200)

2)将Id 200放在列表顶部(Order = 1)

update MyTable 
set Order = 1
where Id = 200

答案 1 :(得分:3)

如果您想将项目移到顶部,并在单个参数中更新所有其他项目的顺序,您可以执行以下操作:

UPDATE MyTable
SET    Order = (CASE Order WHEN 190 THEN 1
                           ELSE Order + 1
                           END)
WHERE  Order BETWEEN 1 AND 190

答案 2 :(得分:1)

我想,你在看什么

Select * from TableName order by ID Desc/Asc

您想订购行AscendingDescending

答案 3 :(得分:1)

我认为上述问题并不能解决问题。我相信你的问题的答案是你已经怀疑的 - 要将order = 200更改为order = 1,你必须重新调整其他每个值,或使用带小数的数字格式。

然而,我强烈怀疑如果你详细说明为什么你需要这样做,我们可以使用一些更好的推荐方法。