给出一个示例表,例如:
CREATE TABLE TESTING_Order(
Order INT,
Name VARCHAR(5)
)
INSERT INTO TESTING_Order
VALUES
(0, 'Zero'),
(1, 'One'),
(2, 'Two'),
(3, 'Three'),
(4, 'Four'),
(5, 'Five'),
(6, 'Six'),
(7, 'Seven')
我想知道如何实现一种“堆叠”来显示,例如,第一个玩家每回合“左”移动的游戏中的转弯顺序。我可以使用两个更新语句来完成此任务:
UPDATE TESTING_Order
SET Order = Order + 1
UPDATE TESTING_Order
SET Order = (SELECT Min(Order) -1 FROM TESTING_Order)
WHERE Order = (SELECT MAX(Order) FROM TESTING_Order)
我想知道是否有更干净/更正确的方法,特别是如果可以使用单个UPDATE语句完成其他方式。
换句话说,我认为我所追求的是一个更好的LIFO堆栈实现,可以对每个pop进行推送 - 请原谅我可能会对任何术语进行屠宰。
答案 0 :(得分:2)
这里有一个答案:
要循环浏览列表,我决定使用:
UPDATE TESTING_Order
SET nOrder =
Case
WHEN (nOrder - 1) < 0 THEN (SELECT Count(*) FROM TESTING_Order) - 1
WHEN (nOrder - 1) >= 0 THEN (nOrder - 1) % (SELECT MAX(nOrder) + 1 FROM TESTING_Order)
END
这允许我以正确的方式移动列表(我意识到我的答案可能没有),并且有利于在一个语句中执行我所要求的操作。感谢您指出我正确的方向,Wiseguy。