2017-08-09 3 views
0

Je veux faire une vue de calcul dans hana studio où je dois maintenir le vieillissement du produit qui est en attente dans l'inventaire.Calcul du vieillissement de l'inventaire voir dans Hana Studio

Il soustraira sur premier arrivé, premier ... Je veux dire en cas de P001 produit alors 5500 soustraira 1000 premier bilan alors la quantité soustraira 2000 et ainsi de suite jusqu'à ce qu'il sera nul .. est inférieure à la table de transaction ..

Department |Product | Date    | Quantity |Indicator 
------------+---------+--------------------+-----------+--------- 
D001  |P001  | 01-Jul-2017  | 1000  |ADD 
D001  |P001  | 10-Jul-2017  | 2000  |ADD 
D001  |P001  | 15-Jul-2017  | 3000  |ADD 
D001  |P001  | 16-Jul-2017  | 2000  |ADD 
D001  |P001  | 18-Jul-2017  | 5500  |SUBTRACT 
D001  |P002  | 12-Jul-2017  | 3000  |ADD 
D001  |P002  | 14-Jul-2017  | 2000  |ADD 
D001  |P002  | 15-Jul-2017  | 4000  |SUBTRACT 

Et la sortie finale devrait être quelque chose comme. si la date d'aujourd'hui est le 31-juillet-2017

Department |Product | Date    | Quantity |AgeinginDays 
------------+---------+--------------------+-----------+--------- 
D001  |P001  | 15-Jul-2017  | 500  |16 
D001  |P001  | 16-Jul-2017  | 2000  |15 
D001  |P002  | 14-Jul-2017  | 1000  |17 
+0

quelqu'un ?? s'il vous plaît aide –

Répondre

0

J'ai créé la table d'inventaire et l'ai peuplée avec vos données d'échantillon. Voici les codes SQL pour cela. S'il vous plaît essayer de partager ces méta-données lorsque vous demandez de l'aide à l'avenir :)

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; 

Après la table d'échantillons et les données sont prêtes, je préparais le code suivant SQLScript pour le vieillissement. Comme il peut-être difficile à comprendre et à suivre le code, je partage votre problème et a fourni une solution détaillée à stock aging SQL calculation on SAP HANA database

Et voici les codes SQL pour vous aider à répondre à vos besoins

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 

Et c'est la sortie de l'exécution du bloc SQL ci-dessus enter image description here

J'espère que cela aide,