#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 миллион строк в таблице