Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL zum Abrufen des nächsten Nicht-Null-Werts in der Spalte

Eine Methode ist die Verwendung von 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;

Eine Möglichkeit, dies mit Fensterfunktionen (in SQL Server 2012+) zu tun, besteht darin, ein kumulatives Maximum für die ID in umgekehrter Reihenfolge zu verwenden:

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;

Die Unterabfrage erhält den Wert des nächsten Nicht-NULL Ich würde. Die äußere Abfrage verbreitet dann den orig Wert über alle Zeilen mit derselben ID (denken Sie daran, in einer Gruppe von Zeilen mit derselben nextid , nur einer hat einen Nicht-NULL Wert für orig ).