首页 > 解决方案 > SQL查询空值根据另一个替换

问题描述

因此,我使用 ROW_NUMBER() OVER(PARTITION BY) 查询返回数据和行号,并将其放入临时表中。初始输出看起来像屏幕截图:

截图输出.

从这里我需要在 bt_newlabel 列中分别替换空值。因此,第 1-4 行正在进行中,5-9 为承保,10-13 为实施,依此类推。

我正在碰壁,试图确定如何做到这一点。感谢您提供有关我将如何处理此问题的任何帮助或意见。

标签: sqlsql-server-2012

解决方案


一种方法是分配组,然后分配值。如:

select t.*, max(bt_newlabel) over (partition by grp) as new_newlabel
from (select t.*, count(bt_newlabel) over (order by bt_stamp) as grp
      from t
     ) t;

该组只是先前在数据中看到的已知值的数量。

您可以使用以下内容更新该字段:

with toupdate as (
      select t.*, max(bt_newlabel) over (partition by grp) as new_newlabel
      from (select t.*, count(bt_newlabel) over (order by bt_stamp) as grp
            from t
           ) t
     )
update toupdate
    set bt_newlabel = new_newlabel
    where bt_newlabel is null;

推荐阅读