如何根据条件替换NULL值?

时间:2020-05-22 14:40:02

标签: sql oracle

是否可以将空值替换为源自条件的值? 我在Oracle中有下表(左侧):
enter image description here

我想用具有最高Sales的Manager名称替换manager列中的NULL值。我不太在乎“销售”列。它可以保留为NULL。在所附图片的右侧,您可以看到所需的结果。我应该提到的是,我只关心最后一个绿色行,因此,如果必须删除其余信息,那完全没问题。

1 个答案:

答案 0 :(得分:0)

您可以使用分析功能来做到这一点:

select t.*,
       coalesce(manager,
                first_value(manager ignore nulls) over (order by sales desc)
               ) as imputed_manager
from t;

如果您确实需要更新,则:

update t
    set manager = (select max(manager) keep (dense_rank first order by sales desc nulls last)
                   from t
                   where manager is not null
                  )
    where manager is null;

我不喜欢这样直接更改数据。看来很危险。