sql >> Databasteknik >  >> RDS >> Sqlserver

SQL för att få nästa inte null-värde i kolumnen

En metod är att använda 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;

Ett sätt du kan göra detta med fönsterfunktioner (i SQL Server 2012+) är att använda ett kumulativt max på id, i omvänd ordning:

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;

Underfrågan får värdet av nästa icke-NULL id. Den yttre frågan sprider sedan orig värde över alla rader med samma id (kom ihåg, i en grupp rader med samma nextid , endast en har en icke-NULL värde för orig ).




  1. Oracle SQL hur man skriver en sql-sats som verifierar om användare i mitt nätverk (dvs vänner eller vänners vänner)

  2. Hur installerar man localdb separat?

  3. SQL Query-aggregatet kanske inte visas i WHERE-satsen

  4. DATEDIFF() vs DATEDIFF_BIG() i SQL Server:Vad är skillnaden?