LIFO 堆栈,可在 SQL 中推送每个 Pop



给定一个示例表,例如:

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堆栈的更好实现,它可以对每个流行音乐执行推送 - 请原谅我可能屠杀任何术语。

只是为了这里有一个答案:

为了循环浏览列表,我决定使用:

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

这允许我以正确的方式移动列表(我意识到我的答案可能没有),并且有一个好处,只需一个语句即可完成我要求的操作。谢谢你为我指出正确的方向,怀斯盖。

最新更新