Salah satu caranya adalah dengan menggunakan 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;
Salah satu cara Anda dapat melakukan ini dengan fungsi jendela (dalam SQL Server 2012+) adalah dengan menggunakan id maksimum kumulatif, dalam urutan terbalik:
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;
Subquery mendapatkan nilai dari non-NULL
. berikutnya Indo. Kueri luar kemudian menyebarkan orig
nilai atas semua baris dengan id yang sama (ingat, dalam sekelompok baris dengan nextid
yang sama , hanya satu yang akan memiliki non-NULL
nilai untuk orig
).