Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle/Sybase SQL - dapatkan nilai berdasarkan catatan sebelumnya (bukan LAG sederhana)

Salah satu cara untuk melakukan ini adalah dengan fungsi peringkat bersarang. Pertama, tetapkan nilai konstan untuk semua yang mendapat satu nilai (menggunakan max() over ) lalu gunakan ini sebagai partisi.

select t.Invoice_Id, t.Invoice_Line, t.Kit_Flag, t.Part_Number,
       max(KitPart) over (partition by invoice_id, KitNum) as Parent_Part
from (select t.*,
             sum(isKit) over (partition by InvoiceId order by InvoiceLine) as KitNum
      from (select t.Invoice_Id, t.Invoice_Line, t.Kit_Flag, t.Part_Number,
                   (case when Kit_Flag = 'K' then 1 else 0 end) as IsKit,
                   (case when Kit_Flag = 'K' then Part_Number end) as KitPart
            from Invoice_Data t
           ) t
     ) t



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle - Pilih di mana bidang memiliki karakter huruf kecil

  2. Bekerja dengan objek BLOB di Oracle

  3. Kesalahan saat mengonversi XML dari kolom CLOB ke kolom XMLType

  4. Impor gumpalan melalui SAS dari ORACLE DB

  5. Bagaimana Cara Menaikkan Pengecualian di PL/SQL?