sql >> Database >  >> RDS >> Oracle

Oracle/Sybase SQL - waarde ophalen op basis van een eerder record (geen eenvoudige LAG)

Een manier om dit te doen is met geneste rangschikkingsfuncties. Wijs eerst een constante waarde toe aan alles dat één waarde krijgt (met behulp van max() over ) en gebruik dit dan als een partitie.

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. Microsoft SQL Server 2005/2008:gegevenstype XML versus tekst/varchar

  2. SQL NOT-operator voor beginners

  3. Hoe auto_increment-waarden opnieuw te gebruiken?

  4. Toon alle databasenamen