Вот что я пробовал. Проблема с приведенным ниже подходом заключается в том, что функция ROW_NUMBER () сбрасывает SeatNum в 1 для каждой отдельной строки.
Любая помощь приветствуется. Другой подход, который я попробовал, был с функциями RANK и DENSE_RANK, но они также сбрасывали значение SeatNum на 1 после выполнения кода.
CREATE TABLE Seating (
Section INT,
Row INT,
SeatNum INT,
NumOfSeats INT,
LastSeat INT);
INSERT INTO Seating(Section,Row,SeatNum,NumOfSeats,LastSeat)
VALUES(101,1,1,2,2),
(101,1,3,4,6),
(102,4,5,2,6),
(102,5,1,2,2),
(103,1,6,2,7);
WITH cte
AS
( SELECT
Section,
Row,
SeatNum,
NumOfSeats,
LastSeat
FROM Seating
UNION ALL
SELECT
Section,
Row,
SeatNum,
NumOfSeats,
LastSeat
FROM Seating
WHERE Section = 101
UNION ALL
SELECT
Section,
Row,
SeatNum,
NumOfSeats,
LastSeat
FROM Seating
)
SELECT
Section,
Row,
ROW_NUMBER() OVER (PARTITION BY Section,Row ORDER BY Row) AS SeatNum,
NumOfSeats,
LastSeat from cte
ORDER BY Section;