идентификация NULL и обновление для одного и того же ключевого столбца в oracle

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть тестовая таблица, содержащая следующие сведения:

 ID  Key_COLUMN  final_Value
1   aaa          1234
2   bbb          2345
3   bbb          NULL
4   ccc          456
5   ccc          145 
 

Желаемый результат:
—final_value обновлено с NULL до key_column на основе 2345 (bbb)

 ID  Key_COLUMN  final_Value
1   aaa          1234
2   bbb          2345
3   bbb          2345  
4   ccc          456
5   ccc          145 
 

Определите КЛЮЧЕВОЙ столбец, имеющий значение NULL и значение, и обновите значение NULL значением.

это обновление потребовало огромного объема данных

Пожалуйста, помогите.

Ответ №1:

Вы можете использовать оконные функции:

 select t.*,
       coalesce(final_value, max(final_value) over (partition by key_column)) as imputed_final_value
from t;
 

Если вы хотите update , чтобы — на самом деле изменить данные — вы можете использовать коррелированный подзапрос:

 update t
    set final_value = (select t2.final_value
                       from t t2 
                       where t2.key_column = t.key_column and
                             t2.final_value is not null and
                             rownum = 1
                      )
    where final_value is null;
 

Комментарии:

1. Спасибо! это работает на меня.. Любые способы проверки правильности обновления записей за один раз.. У нас есть 1 миллион строк в таблице