我的数据组织如下:
Invoice_Id Invoice_Line Kit_Flag Part_Number
---------- ------------ -------- -----------
AB12345 1 K KT-1234A
AB12345 2 C 1234567
AB12345 3 C 1234568
AB12345 4 C 1234569
AB12345 5 C 1234560
AB12345 6 K KT-1234C
AB12345 7 C 1234561
AB12345 8 C 1234562
AB12345 9 K KT-1234Q
AB12345 10 C 5678901
AB12345 11 C 1234561
AB12345 12 C 1234562
我试图在单个 Invoice_Id(K = Parent,C = Child)中从 Kit_Flag 为“K”的最后一行获取后续行的 Part_Number 值。为简单起见,我在此处仅列出了一个发票 ID。
因此,对于上面的数据,结果将如下所示:
Invoice_Id Invoice_Line Kit_Flag Part_Number Parent_Part
---------- ------------ -------- ----------- ------------
AB12345 1 K KT-1234A KT-1234A
AB12345 2 C 1234567 KT-1234A
AB12345 3 C 1234568 KT-1234A
AB12345 4 C 1234569 KT-1234A
AB12345 5 C 1234560 KT-1234A
AB12345 6 K KT-1234C KT-1234C
AB12345 7 C 1234561 KT-1234C
AB12345 8 C 1234562 KT-1234C
AB12345 9 K KT-1234Q KT-1234Q
AB12345 10 C 5678901 KT-1234Q
AB12345 11 C 1234561 KT-1234Q
AB12345 12 C 1234562 KT-1234Q
在 Excel 中,这可以通过“=If(C2="K",C3,D2)" 之类的方式实现,这实际上是我们暂时必须解决的问题,但我正在尝试将其自动化。
该表在 Oracle 9i 和 Sybase 上都有,但 Sybase 实例没有分析功能。
我不认为这会起作用(而且它没有),但从概念上讲,它显示了我正在尝试做的事情:
select
t.Invoice_Id, t.Invoice_Line, t.Kit_Flag, t.Part_Number,
case
when Kit_Flag = 'K' then Part_Number
else lag(Parent_Part, 1) over (partition by Invoice_Id order by Invoice_Line)
end as Parent_Part
from Invoice_Data t
欢迎任何建议和/或指导。