Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL để lấy giá trị tiếp theo không phải giá trị null trong cột

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 ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất kế hoạch thực thi thủ tục được lưu trữ kém trong SQL - đánh hơi tham số

  2. Cách tìm vị trí tệp mặc định cho tệp dữ liệu và tệp nhật ký trong SQL Server

  3. Sự khác biệt giữa bảng DELETE và TRUNCATE trong SQL Server

  4. SQL Server 2012 gói dịch vụ 1 và bản cập nhật tích lũy 1

  5. Nhận xét SQL về Tạo bảng trên SQL Server 2008