如何基于组为列中的所有NULL值分配非Null值?

时间:2019-08-30 09:46:59

标签: sql

我找到了很多帮助,以帮助您解释如何用0或以前的值替换NULL,但是我想用非null值替换Null值。

对于数据中的每个组,注册号可以是一个整数或NULL,我想用非null值替换所有NULL值。

因此对于此表,我想用该组的32550替换所有空值。

2 个答案:

答案 0 :(得分:0)

Standard SQL通过lag()选项提供last_value()ignore nulls。假设有一列指定顺序的列,则可以使用以下命令获取带有值的最新行:

select t.*,
       coalesce(registration,
                last_value(registration ignore nulls) over (order by <ordering column>)
               ) as imputed_registration
from t;

答案 1 :(得分:0)

如果您有一个这样的表:

Group   | Registration
----------------------
A       | 32543
A       | 32543
A       | NULL
A       | 32543
B       | 12345
B       | 12345
B       | NULL

您可以执行以下操作:

UPDATE my_table AS a
  SET registration = (
    SELECT max(registration)
      FROM my_table AS b
      WHERE b.group = a.group
  );

仅当给定的“组”的“注册”始终相同时,此方法才有效;如果没有带有“非空”“注册”的记录,则将“注册”保留为NULL。