我创建了库存表并使用您的示例数据填充它。 这是SQL的代码。请尝试当你问帮助在未来分享这样的元数据:)
create column table InventoryItems
(
Department varchar(10),
Product varchar(10),
Date date,
Quantity int,
Indicator varchar(10)
);
insert into InventoryItems select 'D001','P001','20170701',1000,'ADD' from dummy;
insert into InventoryItems select 'D001','P001','20170710',2000,'ADD' from dummy;
insert into InventoryItems select 'D001','P001','20170715',3000,'ADD' from dummy;
insert into InventoryItems select 'D001','P001','20170716',2000,'ADD' from dummy;
insert into InventoryItems select 'D001','P001','20170718',5500,'SUBTRACT' from dummy;
insert into InventoryItems select 'D001','P002','20170712',3000,'ADD' from dummy;
insert into InventoryItems select 'D001','P002','20170714',2000,'ADD' from dummy;
insert into InventoryItems select 'D001','P002','20170715',4000,'SUBTRACT' from dummy;
样表后和数据准备好了,我按照用于老化SQLScript代码。因为它也许很难理解和遵循的代码,我分享你的问题,并在stock aging SQL calculation on SAP HANA database
提供了详细的解决方案,这里是SQL代码来帮助你完成你的要求
with Ins as (
select
row_number() over (partition by Product order by date) as AddId,
*,
sum(Quantity) over (partition by Product order by Date rows unbounded preceding) as sumIn,
sum(Quantity) over (partition by Product order by Date desc rows unbounded preceding) as sumX
from InventoryItems
where
Indicator = 'ADD'
), Outs as (
select
row_number() over (partition by Product order by date) as AddId,
*,
sum(Quantity) over (partition by Product order by Date rows unbounded preceding) as sumOut
from InventoryItems
where
Indicator = 'SUBTRACT'
), Inv as (
select
ins.Product, max(sumIn) - max(ifnull(sumOut,0)) as inv
from Ins
left join Outs
on ins.Product = outs.Product
group by ins.Product
), calc as (
select
Ins.*,
Inv.inv,
inv-sumx as diff
from Ins
left join Inv
on ins.Product = inv.Product
)
select
Department, Product, Date,
case when diff > 0 then quantity else quantity-abs(diff) end as Quantity,
DAYS_BETWEEN(Date,current_date) as AgeingInDays
from (
select *, 1 as rn from calc where diff >= 0
union all
(
select * from (
select
*, row_number() over (partition by Product order by diff desc) as rn
from calc
where diff < 0
) t where rn = 1
)
)
order by Product, AddId
这是输出上面的SQL块执行
我希望它能帮助,
人的?请帮忙 –