Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle/Sybase SQL - вземете стойност въз основа на предишен запис (не просто LAG)

Един от начините да направите това е с вложени функции за класиране. Първо, присвоете постоянна стойност на всичко, което получава една стойност (използвайки max() over ) и след това използвайте това като дял.

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 заявка за намиране на низ, който не съдържа знаци

  2. node-oracledb грешка при изпълнение на съхранена процедура NJS-012

  3. Какъв тип данни на Java съответства на типа данни на Oracle SQL NUMERIC?

  4. Как да ограничим таблица на база данни, така че само един ред да има определена стойност в колона?

  5. Множество полета на Oracle в Select IN Parameter