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:
Mit Artikelname
DECLARE @stichtag DATETIME2= N'2020-08-01'; SELECT [ta].[cArtNr] [Artikelnummer], [ta].[cBarcode] AS [EAN], tab.cName [Artikelname], 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 [Durschn. Ek], tliefartikel.fEKNetto [Lief. Ek], tliefartikel.cWaehrung [Lief. Ek Währung] FROM dbo.tWarenLagerEingang twle INNER JOIN dbo.tWarenLagerPlatz twlpE ON twlpE.kWarenLagerPlatz = twle.kWarenLagerPlatz INNER JOIN dbo.tArtikel ta ON ta.kArtikel = twle.kArtikel INNER JOIN dbo.tArtikelBeschreibung tab ON tab.kArtikel = ta.kArtikel AND tab.kSprache = 1 AND tab.kShop = 0 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].[cBarcode], tab.cName, tliefartikel.fEKNetto, tliefartikel.cWaehrung;
Nach Lagerplatz
DECLARE @stichtag DATETIME2= N'2020-08-01'; SET NOCOUNT ON; SELECT [ta].[cArtNr] [Artikelnummer], [ta].[cBarcode] AS [EAN], twlpE.cName [Lagerplatz], 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))) * AVG(ta.fEKNetto) AS [Durschn. Ek] FROM dbo.tWarenLagerEingang twle INNER JOIN dbo.tWarenLagerPlatz twlpE ON twlpE.kWarenLagerPlatz = twle.kWarenLagerPlatz LEFT JOIN dbo.tArtikel ta ON ta.kArtikel = twle.kArtikel 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 GROUP BY [ta].[cArtNr], ta.kArtikel, [ta].[cBarcode], twlpE.cName;
Wenn ihr Fragen dazu habt, einfach in die Kommentare.
Copyright (c) 2020 T4DT GMbH
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.