1

给定一个示例表,例如:

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 Stack 实现,它对每个 pop 执行推送——请原谅我可能会扼杀任何术语。

4

1 回答 1

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

于 2013-02-02T21:27:17.910 回答