Обновить строку в таблице на основе столбца в той же таблице - PullRequest
2 голосов
/ 17 марта 2020

Как мне обновить строки в таблице на основе значений в столбце в той же таблице?

TableA:

 col1 col2 col3 total col_num
 NULL NULL NULL 100   1
 NULL NULL NULL 200   2
 NULL NULL NULL 300   3

Результат после обновления:

TableA :

col1  col2  col3 total col_num
100   NULL  NULL 100   1
NULL  200   NULL 200   2
NULL  NULL  300  300   3

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Вы можете использовать case выражения:

update tablea
set
    col1 = case when col_num = 1 then total end,
    col2 = case when col_num = 2 then total end,
    col3 = case when col_num = 3 then total end

Возможно, вы добавите некоторые логики c для обновления только ненулевых столбцов

    update tablea
set
    col1 = case when col1 is null and col_num = 1 then total end,
    col2 = case when col2 is null and col_num = 2 then total end,
    col3 = case when col3 is null and col_num = 3 then total end
where
    (col1 is null and col_num = 1)
    or (col2 is null and col_num = 2)
    or (col3 is null and col_num = 3)
0 голосов
/ 17 марта 2020

Если вы не прибегаете к каким-либо динамическим конструкциям оператора SQL, вы не можете сделать это в общем случае. Однако для закрытого набора столбцов вы можете использовать несколько выражений case:

UPDATE tableA
SET col1 = CASE col_num WHEN 1 THEN total ELSE col1 END,
    col2 = CASE col_num WHEN 2 THEN total ELSE col2 END,
    col3 = CASE col_num WHEN 3 THEN total ELSE col3 END
...