Стек LIFO, который толкает каждый поп в SQL

Приведенный пример таблицы, такой как:

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, которая выполняет толчок на каждом поп - извините, что я возможно вырезал любую терминологию.

1 ответ

Решение

Просто так, что здесь есть ответ:

Для просмотра списка я решил использовать:

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.

Другие вопросы по тегам