fbpx
A

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.