/* HIER WERTE ANPASSEN */
declare @stichtag varchar(50) = '12-31-2018'
declare @warenlager varchar(500) = 'WMS' -- Lässt man hier den Wert leer, oder einen den es nicht gibt, kommen alle Lager raus.
declare @timeStamp datetime2 = CONVERT(DATE, @stichtag)
declare @warenlagerId int = (SELECT TOP 1 kWarenlager FROM tWarenlager WHERE cName = @warenlager And nAktiv = 1)
SELECT cArtNr 'Artikelnummer',
bestand.Bestand,
fEkNetto AS 'EK Netto',
fEkNetto * bestand.Bestand AS 'Gesamt Ek Netto (GLD)',
bestand.Wert 'Gesamt Ek Laut WE',
fVKNetto AS 'VK Netto',
fVKNetto * bestand.Bestand AS 'Gesamt VK Netto',
@timeStamp 'Zeitpunkt',
wl.cName AS 'Warenlager'
FROM tArtikel a
JOIN
(
SELECT tabEingang.kArtikel,
tabEingang.kWarenLager,
IsNull(Eingaenge, 0) - ISNULL(Ausgaenge, 0) 'Bestand',
IsNull(WertEingänge, 0) - ISNULL(WertAusgänge, 0) 'Wert'
FROM
(
SELECT SUM(wle.fAnzahl) AS 'Eingaenge',
SUM(wle.fAnzahl * wle.fEKEinzel) AS 'WertEingänge',
kArtikel,
wlp.kWarenLager
FROM dbo.tWarenLagerEingang wle
JOIN dbo.tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = wle.kWarenLagerPlatz
WHERE wle.dErstellt < @timeStamp
AND (@warehouse IS NULL
OR wlp.kWarenLager = @warehouse)
-- and ISNULL(wle.kWarenLagerEingang_Ursprung,0) != 0
GROUP BY wle.kArtikel,
wlp.kWarenLager
) tabEingang
LEFT JOIN
(
SELECT SUM(wla.fAnzahl) AS 'Ausgaenge',
SUM(wla.fAnzahl * wle.fEKEinzel) AS 'WertAusgänge',
wla.kArtikel,
wlp.kWarenLager
FROM dbo.tWarenLagerAusgang wla
JOIN dbo.tWarenLagerEingang wle ON wla.kWarenLagerEingang = wle.kWarenLagerEingang
JOIN dbo.tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = wla.kWarenLagerPlatz
WHERE 1 = 1
AND wla.dErstellt < @timeStamp
AND (@warehouse IS NULL
OR wlp.kWarenLager = @warehouse)
GROUP BY wla.kArtikel,
wlp.kWarenLager
) tabAusgang ON tabEingang.kArtikel = tabAusgang.kArtikel
) bestand ON a.kArtikel = bestand.kArtikel
JOIN dbo.tWarenlager wl ON bestand.kWarenLager = wl.kWarenLager
WHERE Bestand > 0;