Обновить строки на основе предыдущего значения того же столбца. (MSSQL2008) - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть таблица с одним столбцом:

ColA    Rownumb
1   1
1   2
1   3
2   4
1   5
1   6
1   7
2   8
2   9
2   10
2   11
2   12
2   13
2   14
3   15
2   16
2   17
2   18
3   19
3   20
3   21
3   22
3   23
3   24

В строке 4 значение ColA изменяется впервые. От строки 8 он изменился навсегда в том смысле, что следующие строки также имеют значение 2. Я хочу обновить строки 5, 6 и 7, чтобы значение 1 стало 2. Та же логика применима к строкам 16, 17 и 18. В этом случае Я хочу обновить ColA с 2 до 3.

Так как мне обновить строки, как указано выше?

Спасибо.

1 Ответ

0 голосов
/ 05 сентября 2018

Поскольку вы используете SQL-Server-2008, вы можете сделать это с помощью рекурсивного общего табличного выражения:

DECLARE @DataSource TABLE
(
    [ColA] INT
   ,[Rownumb] INT
);

INSERT INTO @DataSource ([ColA], [Rownumb])
VALUES (1, 1), (1, 2), (1, 3), (2, 4), (1, 5), (1, 6), (1, 7), (2, 8), (2, 9), (2, 10), (2, 11), (2, 12), (2, 13), (2, 14), (3, 15), (2, 16), (2, 17), (2, 18), (3, 19), (3, 20), (3, 21), (3, 22), (3, 23), (3, 24);


WITH DataSourceRecursive AS
(
    SELECT [ColA]
          ,[Rownumb]
    FROM @DataSource
    WHERE [Rownumb] = 1
    UNION ALL
    SELECT CASE WHEN DS1.[ColA] < DSR.[ColA] THEN DSR.[ColA] ELSE DS1.[ColA] END
          ,DS1.[Rownumb]
    FROM @DataSource DS1
    INNER JOIN DataSourceRecursive DSR
        ON DS1.[Rownumb] = DSR.[RowNumb] + 1
)
SELECT *
FROM DataSourceRecursive;

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...