1 つの方法は、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;
ウィンドウ関数 (SQL Server 2012 以降) でこれを行う方法の 1 つは、id の累積最大値を逆順で使用することです。
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;
サブクエリは、次の非 NULL
の値を取得します ID。外側のクエリは orig
を広げます 同じ id を持つすべての行の値 (同じ nextid
を持つ行のグループであることを思い出してください) 、非 NULL
を持つのは 1 つだけです orig
の値 ).