Problemstellung
Ihr möchtet den EK, sowie den Lagerbestand zu einem in der Vergangenheit liegenden Zeitpunkt abfragen und dabei auf keine externen Tools setzen. Ihr seid so fancy, dass ihr das ganze direkt in klipfolio oder PowerBI direkt visualisiert haben wollt und daher das Plain SQL braucht?
Dann schaut euch das Ding hier mal an:
/*
Jedem, der eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, wird hiermit kostenlos die Erlaubnis erteilt, ohne Einschränkung mit der Software zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und/oder Verkaufen von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
*/
DECLARE @stichtag DATETIME2 = '2023-12-31'
SELECT
[ta].[cArtNr] [Artikelnummer]
, [ta].[cBarcode] AS [EAN]
, CONVERT(FLOAT, SUM(
CASE
WHEN DATEDIFF(DAY, [twle].[dErstellt], @stichtag) >= 0
THEN [twle].[fAnzahl]
ELSE 0
END
-
ISNULL([ttwla].[Anzahl], 0))) AS [Stichtagsbestand],
CONVERT
(
FLOAT,
SUM(
(
CASE
WHEN DATEDIFF(DAY, [twle].[dErstellt], @stichtag) >= 0
THEN [twle].[fAnzahl]
ELSE 0
END
- ISNULL([ttwla].[Anzahl], 0))
* [twle].[fEKEinzel]
) / SUM(
CASE
WHEN DATEDIFF(DAY, [twle].[dErstellt], @stichtag) >= 0
THEN [twle].[fAnzahl]
ELSE 0
END
- ISNULL([ttwla].[Anzahl], 0))
) AS [Gewichteter Durschn. Ek],
CONVERT(float,ta.fEKNetto) [EK GLD],
CONVERT(float,tliefartikel.fEKNetto) [Lief. Ek in Lieferanten-Währung],
tliefartikel.cWaehrung [Lief. Ek Währung]
FROM dbo.tWarenLagerEingang twle
INNER JOIN dbo.tWarenLagerPlatz twlpE
ON twlpE.kWarenLagerPlatz = twle.kWarenLagerPlatz
LEFT JOIN dbo.tArtikel ta
ON ta.kArtikel = twle.kArtikel
INNER JOIN tliefartikel
ON tliefartikel.tArtikel_kArtikel = ta.kArtikel AND tliefartikel.nStandard = 1
LEFT OUTER JOIN
(
SELECT
SUM(ISNULL([fAnzahl], 0)) [Anzahl]
, [twla].[kWarenLagerEingang]
FROM dbo.tWarenLagerAusgang twla
WHERE [twla].[dErstellt] <= @stichtag
GROUP BY
[twla].[kWarenLagerEingang]
) ttwla
ON ttwla.kWarenLagerEingang = twle.kWarenLagerEingang
WHERE (CASE
WHEN DATEDIFF(DAY, [twle].[dErstellt], @stichtag) >= 0
THEN [twle].[fAnzahl]
ELSE 0
END
-
ISNULL([ttwla].[Anzahl], 0)) > 0
GROUP BY
[ta].[cArtNr]
,ta.kArtikel
,ta.fEKNetto
, [ta].[cBarcode]
,tliefartikel.fEKNetto
,tliefartikel.cWaehrung
Erläuterung
📊 Gewichteter Durchschnitts-EK
CONVERT(FLOAT,
SUM((Bestand) * [twle].[fEKEinzel])
/ SUM(Bestand)
) AS [Gewichteter Durschn. Ek]
Formel
Ziel
Berechnet den durchschnittlichen Einkaufspreis, gewichtet nach der Menge zum Stichtag.Dies ist besonders relevant für die Bestandsbewertung nach FIFO/LIFO oder im Durchschnittsbewertungsverfahren.
💰 EK GLD (Standard-EK aus Stammdaten)
- Der Standard-EK aus den Artikelstammdaten.
- Wird für einfache Kalkulationen verwendet, ist aber oft nicht so präzise wie der gewichtete EK.
Kommentare
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.