sql >> Databáze >  >> RDS >> Sqlserver

SQL pro získání další nenulové hodnoty ve sloupci

Jednou z metod je použití 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;

Jedním ze způsobů, jak to udělat s funkcemi okna (v SQL Server 2012+), je použít kumulativní maximum pro id v obráceném pořadí:

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;

Dílčí dotaz získá hodnotu dalšího non-NULL id. Vnější dotaz pak rozšíří orig hodnotu ve všech řádcích se stejným ID (pamatujte, že ve skupině řádků se stejným nextid , pouze jeden bude mít jinou hodnotu než NULL hodnotu pro orig ).




  1. MySql - Existuje někde fronta dotazů

  2. Jaký je rozsah 'SET Foreign_key_checks =0'?

  3. JPA přetrvává mnoho pro mnoho

  4. Hodnotový model atributu entity – alternativa výkonu?