Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL para obter o próximo valor não nulo na coluna


Um método é usar outer apply :
select t.*, t2.orig as newval
from @t t outer apply
     (select top 1 t2.*
      from @t t2
      where t2.id >= t.id and t2.orig is not null
      order by t2.id
     ) t2;

Uma maneira de fazer isso com funções de janela (no SQL Server 2012+) é usar um máximo cumulativo no id, na ordem inversa:
select t.*, max(orig) over (partition by nextid) as newval
from (select t.*,
             min(case when orig is not null then id end) over (order by id desc) as nextid
      from @t
     ) t;

A subconsulta obtém o valor do próximo não-NULL Eu iria. A consulta externa então espalha o orig valor sobre todas as linhas com o mesmo id (lembre-se, em um grupo de linhas com o mesmo nextid , apenas um terá um não-NULL valor para orig ).