Một phương pháp là sử dụng 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;
Một cách bạn có thể làm điều này với các hàm cửa sổ (trong SQL Server 2012+) là sử dụng giá trị tối đa tích lũy trên id, theo thứ tự nghịch đảo:
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;
Truy vấn con nhận giá trị của giá trị không phải NULL
tiếp theo Tôi. Sau đó, truy vấn bên ngoài trải rộng orig
giá trị trên tất cả các hàng có cùng id (hãy nhớ, trong một nhóm các hàng có cùng nextid
, chỉ một thẻ sẽ có không phải NULL
giá trị cho orig
).