Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL, aby uzyskać następną niepustą wartość w kolumnie

Jedną z metod jest użycie 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;

Jednym ze sposobów, aby to zrobić za pomocą funkcji okna (w SQL Server 2012+) jest użycie skumulowanego maksimum na id, w odwrotnej kolejności:

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;

Podzapytanie pobiera wartość następnej innej niż NULL ID. Zewnętrzne zapytanie następnie rozkłada orig wartość nad wszystkimi wierszami o tym samym identyfikatorze (pamiętaj, w grupie wierszy o tym samym nextid , tylko jeden będzie miał wartość inną niż NULL wartość dla orig ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nierówne <> !=operator na NULL

  2. Utwórz stół 6 x 6 z automatycznym przelewaniem z linii upline

  3. Jak odzyskać usunięte wiersze z tabeli serwera SQL?

  4. Wybierz elementy, takie jak rekordy, z kolumny w innej tabeli

  5. Nieemocjonalne logiczne spojrzenie na konwencje nazewnictwa SQL Server