Обновить столбцы следующей строки с текущей строкой в ​​цикле курсора - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть таблица с записями, отсортированными по группам, необходимо обновить значения COL2, COL3, COL4 2-й строки значениями 1-й строки, если они равны NULL.Также 3-й ряд со 2-м рядом и т. Д. Я пытаюсь с циклом CURSOR.Как мне получить следующую строку в цикле CURSOR?

Текущая таблица

col1 col2  col3  col4  col5  rowNum  maxTotalInGroup
10   NULL   2     4    3      1       3
20    2    NULL  NULL  NULL   2       3                
30   NULL  NULL  NULL  NULL   3       3

40    5     9     9     3     1       2
42    NULL  3    NULL  NULL   2       2

Ожидаемый результат

col1 col2  col3  col4  col5  rowNum  maxTotalInGroup
10   NULL   2     4     3       1       3
20    2     2     4     3       2       3
30    2     2     4     3       3       3

40    5    9      9     3      1       2
42    5    3      9     3      2       2

1 Ответ

0 голосов
/ 19 сентября 2019

Если вы принимаете способ ОБНОВЛЕНИЯ столбцов один за другим, вы можете использовать эту следующую опцию.Вам потребуется изменить имена столбцов в 4-х местах в сценарии, как указано ниже.

Помните, что операция обновления является рискованной.Поэтому, пожалуйста, сначала попробуйте ввести данные теста.

Примечание: Да, как сказал @Eric, еще один вариант - Курсор.

UPDATE A
SET col3 =  --CHANGE COLUMN NAME HERE
(
    SELECT col3 --CHANGE COLUMN NAME HERE
    FROM @your_table C 
    WHERE C.maxTotalInGroup = A.maxTotalInGroup 
    AND C.rowNum = (
        SELECT MAX(B.rowNum) 
        FROM @your_table B 
        WHERE B.maxTotalInGroup = A.maxTotalInGroup 
        AND B.rowNum < A.rowNum
        AND B.col3 IS NOT NULL --CHANGE COLUMN NAME HERE
    )
)
FROM @your_table A
WHERE col3 IS NULL; --CHANGE COLUMN NAME HERE

Вы можете проверить ДЕМО ЗДЕСЬ

...