DECLARE @Stichtag AS DATE = CONVERT(DATE, '2021.08.01', 102)
declare @warenlager varchar(500) = 'WMS'
SELECT --tWarenLagerEingang.kArtikel AS kArtikel,
COALESCE(tArtikel.cArtNr, 'Gesamt:') AS Artikelnummer,
CASE
WHEN GROUPING(tArtikel.cArtNr) = 1
THEN 'Gesamtergebnis'
ELSE MAX(tArtikelBeschreibung.cName)
END AS Artikelname,
tWarenLager.cName AS Lager,
SUM(tWarenLagerEingang.fAnzahl) - SUM(ISNULL(Warenausgang.fAnzahl, 0.0)) AS Bestand,
SUM(tWarenLagerEingang.fAnzahl * tWarenLagerEingang.fEKEinzel) - SUM(ISNULL(Warenausgang.fAnzahl, 0.0) * tWarenLagerEingang.fEKEinzel) AS EKGesamt,
MAX(tWarenLagerEingang.dGeliefertAm) AS LetztesLieferdatum,
CASE
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(GETDATE()) THEN 'dieses Jahr 100%'
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(GETDATE())-1 THEN 'Letztes Jahr 90%'
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(GETDATE())-2 THEN 'Vorletztes Jahr 80%'
ELSE 'anders, undefiniert 50%'
END AS Abwertung,
COALESCE(
CASE
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(GETDATE()) THEN SUM(tWarenLagerEingang.fAnzahl * tWarenLagerEingang.fEKEinzel) - SUM(ISNULL(Warenausgang.fAnzahl, 0.0) * tWarenLagerEingang.fEKEinzel)
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(GETDATE())-1 THEN SUM(tWarenLagerEingang.fAnzahl * tWarenLagerEingang.fEKEinzel*0.9) - SUM(ISNULL(Warenausgang.fAnzahl, 0.0) * tWarenLagerEingang.fEKEinzel*0.9)
WHEN YEAR(MAX(tWarenLagerEingang.dGeliefertAm)) = YEAR(GETDATE())-2 THEN SUM(tWarenLagerEingang.fAnzahl * tWarenLagerEingang.fEKEinzel*0.8) - SUM(ISNULL(Warenausgang.fAnzahl, 0.0) * tWarenLagerEingang.fEKEinzel*0.8)
ELSE SUM(tWarenLagerEingang.fAnzahl * tWarenLagerEingang.fEKEinzel*0.5) - SUM(ISNULL(Warenausgang.fAnzahl, 0.0) * tWarenLagerEingang.fEKEinzel*0.5)
END
, 'Gesamt:')
AS Wertberichtigt
FROM dbo.tWarenLagerEingang
JOIN dbo.tArtikel ON tWarenLagerEingang.kArtikel = tArtikel.kArtikel
JOIN dbo.tSpracheUsed ON nStandard = 1
JOIN dbo.tArtikelBeschreibung ON tArtikel.kArtikel = tArtikelBeschreibung.kArtikel
AND tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
AND tArtikelBeschreibung.kPlattform = 1
JOIN dbo.tWarenLagerPlatz ON tWarenLagerEingang.kWarenLagerPlatz = tWarenLagerPlatz.kWarenLagerPlatz
JOIN dbo.tWarenLager ON tWarenLagerPlatz.kWarenLager = tWarenLager.kWarenLager
LEFT JOIN
(
SELECT SUM(ISNULL(tWarenLagerAusgang.fAnzahl, 0.0)) AS fAnzahl,
tWarenLagerAusgang.kWarenLagerEingang
FROM dbo.tWarenLagerAusgang
WHERE ISNULL(tWarenLagerAusgang.dErstellt, GETDATE()) < DATEADD(dd, +1, @Stichtag)
GROUP BY tWarenLagerAusgang.kWarenLagerEingang
) AS Warenausgang ON tWarenLagerEingang.kWarenLagerEingang = Warenausgang.kWarenLagerEingang
WHERE tWarenLagerEingang.dErstellt < DATEADD(dd, +1, @Stichtag)
AND tWarenLager.cName = @warenlager
GROUP BY tWarenLager.cName, tArtikel.cArtNr
HAVING SUM(tWarenLagerEingang.fAnzahl - ISNULL(Warenausgang.fAnzahl, 0.0)) > 0.0 -- Nur Bestände > 0.0
ORDER BY tArtikel.cArtNr;