sql >> Database teknologi >  >> RDS >> Sqlserver

SQL for at få næste ikke null-værdi i kolonne

En metode er at bruge 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;

En måde du kan gøre dette med vinduesfunktioner (i SQL Server 2012+) er at bruge et kumulativt max på id, i omvendt rækkefølge:

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;

Underforespørgslen får værdien af ​​den næste ikke-NULL id. Den ydre forespørgsel spreder derefter orig værdi over alle rækker med samme id (husk, i en gruppe rækker med samme nextid , vil kun én have en ikke-NULL værdi for orig ).




  1. Avanceret MySQL alfabetisk sortering med præfiks?

  2. Download en kopi af din database

  3. Sikkerhed på rækkeniveau ved hjælp af prisma og postgres

  4. Kan ikke finde min EF-kode første database