2017-01-25 7 views
1

Ich benutze SQL Server 2014..Meine Lager Transaktionstabelle ist wie folgt.FIFO Lagerbestand Bewertung

declare @Stock table (Item char(3) not null,[Date] datetime not null,TxnType varchar(3) not null,Qty int not null,Price decimal(10,2) null) 
insert into @Stock(Item , [Date] ,  TxnType, Qty, Price) values 
('ABC','20120401','IN', 200, 750.00), 
('ABC','20120405','OUT', 100 ,null ), 
('ABC','20120410','IN',  50, 700.00), 
('ABC','20120416','IN',  75, 800.00), 
('ABC','20120425','OUT', 175, null ), 
('XYZ','20120402','IN', 150, 350.00), 
('XYZ','20120408','OUT', 120 ,null ), 
('XYZ','20120412','OUT', 10 ,null ), 
('XYZ','20120424','IN',  90, 340.00); 

Ich muss unten 2 Fälle an jedem Montag Ende berechnen.

  1. Bestandsbewertung der Restmenge

OUTPUT:

Bestandsbewertung der Bestandsdaten

Item Qty  Value 
ABC 50 40000.00 
XYZ 110 37400.00 

Bitte mir helfen, die Lösung in FIFO

+2

Sie scheinen mehrere Fragen zu haben, wodurch es weniger wahrscheinlich ist, dass jemand antwortet. –

+0

Haben Sie _have_ dies in SQL zu tun? SQL dient zum Lesen und Schreiben von Daten. Komplexe Regeln wie diese sind viel besser geeignet für eine Anwendungsschicht, –

+0

danke @ gordon..ich habe die Frage bearbeitet ... – Ljt

Antwort

1
Select Item, FinalQty as [Final Qty], CurrPrice*FinalQty as [Current Value] from (
select Item, Sum(Case When TxnType='OUT' Then -Qty Else Qty End) as FinalQty , 
     (Select Top 1 Price from @Stock where Price is not null and s.Item=Item order by Date Desc) as CurrPrice 
from @Stock s 
group by Item) n 
zu erhalten
+0

@ Thanks..it funktioniert gut .. wenn möglich, bitte geben Sie eine Lösung mit Fensterfunktionen – Ljt

+0

Eine Funktion (wie sum) mit dem over (Partition by ...) gilt als windowing. Das ist, was ich versucht habe, aber das kann keine Bedingungen haben wie in Ihrem Fall mit den IN-Adds und OUT-Subtraktionen. Hier klicken [Windowing by 'Over'] (https://msdn.microsoft.com/en-us/library/ms189461.aspx?f=255&MSPPError=-2147217396) – Edward

+0

danke @Edward .. – Ljt