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

Cách lấy Giá trị trước cho Giá trị Null

Vì bạn đang sử dụng SQL Server 2012 ... đây là phiên bản sử dụng điều đó. Nó có thể nhanh hơn các giải pháp khác nhưng bạn phải kiểm tra điều đó trên dữ liệu của mình.

sum() over() sẽ thực hiện một số tiền đang chạy được sắp xếp theo Id thêm 1 khi có một giá trị trong cột và giữ giá trị hiện tại cho null các giá trị. Sau đó, tổng đang chạy được tính toán được sử dụng để phân vùng kết quả trong first_value() over() . Giá trị đầu tiên được sắp xếp theo Id cho mỗi "nhóm" hàng được tạo bởi tổng đang chạy có giá trị bạn muốn.

select T.Id,
       first_value(T.FeeModeId) 
          over(partition by T.NF 
               order by T.Id 
               rows between unbounded preceding and current row) as FeeModeId,
       first_value(T.Name)      
          over(partition by T.NS 
               order by T.Id 
               rows between unbounded preceding and current row) as Name,
       T.Amount
from (
     select Id,
            FeeModeId,
            Name,
            Amount,
            sum(case when FeeModeId is null then 0 else 1 end) 
              over(order by Id) as NF,
            sum(case when Name is null then 0 else 1 end) 
              over(order by Id) as NS
     from YourTable
     ) as T

SQL Fiddle

Một cái gì đó sẽ hoạt động trước SQL Server 2012:

select T1.Id,
       T3.FeeModeId,
       T2.Name,
       T1.Amount
from YourTable as T1
  outer apply (select top(1) Name
               from YourTable as T2
               where T1.Id >= T2.Id and
                     T2.Name is not null
               order by T2.Id desc) as T2
  outer apply (select top(1) FeeModeId
               from YourTable as T3
               where T1.Id >= T3.Id and
                     T3.FeeModeId is not null
               order by T3.Id desc) as T3

SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thay đổi SQL Server 2005 thành phân biệt chữ hoa chữ thường?

  2. Cách tốt nhất để triển khai đường mòn kiểm tra trong SQL Server?

  3. SQL Server:Mẹo hữu ích cho người mới

  4. Mã hóa ký tự mặc định của SQL Server

  5. SQL Server 2017:Các tính năng có sẵn trên Linux