Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara mendapatkan Nilai Sebelumnya untuk Nilai Null

Karena Anda menggunakan SQL Server 2012... berikut adalah versi yang menggunakan itu. Ini mungkin lebih cepat daripada solusi lain, tetapi Anda harus mengujinya pada data Anda.

sum() over() akan melakukan jumlah berjalan yang dipesan oleh Id menambahkan 1 ketika ada nilai di kolom dan menjaga nilai saat ini untuk null nilai-nilai. Jumlah berjalan yang dihitung kemudian digunakan untuk mempartisi hasilnya di first_value() over() . Nilai pertama diurutkan berdasarkan Id untuk setiap "grup" baris yang dihasilkan oleh jumlah yang berjalan memiliki nilai yang Anda inginkan.

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

Sesuatu yang akan berfungsi sebelum 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. Koneksi MSSQL CodeIgniter

  2. Cara Mengubah Tabel di SQL Server dengan Menggunakan Alter Statement - Tutorial SQL Server / T-SQL Part 35

  3. Kembalikan Semua Kolom yang Tidak Dihitung dari Tabel di SQL Server

  4. Dukungan SQL Server 2008 Berakhir. Sekarang Apa?

  5. Cara Memulihkan Database SQL Server di Mac menggunakan SQL Operations Studio