Một cách để làm điều này là sử dụng các hàm xếp hạng lồng nhau. Đầu tiên, chỉ định một giá trị không đổi cho mọi thứ nhận một giá trị (sử dụng max() over
) và sau đó sử dụng nó làm phân vùng.
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