Neu Berechnung / SQL - Lagerumschlagshäufigkeit

MirkoWK

Sehr aktives Mitglied
14. März 2022
614
209
Hallo Torsten,
danke für die Links. Leider finde ich dort nicht genau das, was mir bei meiner Herausforderung (Berechnung Lagerumschlagshäufigkeit) fehlt.

Ich brauche zur Berechnung Lagerumschlagshäufigkeit die Lagerabgänge (das ist kein Thema) und den durchschnittlichen Lagerbestand nach der Formel hier:
lagerbestand.jpg
Das ist gerade die Herausforderung ;).

Viele Grüße
Mirko
 

MirkoWK

Sehr aktives Mitglied
14. März 2022
614
209
Hallo Torsten,

danke für den Tipp. Ich hatte am Freitag und davor bereits parallel dran gebastelt und es dann doch hinbekommen, auch wenn der Code sicher noch ne Menge Optimierungspotential hat.
Ich stelle ihn hier dennoch mal zur Verfügung. Werft gern Verbesserungsvorschläge in den Raum und vielleicht kann auch so schon einer von euch was damit anfangen ;).

SQL:
DECLARE @Vor1Monat DATE = EOMONTH(DATEADD(MONTH,-1,GETDATE()))
DECLARE @Vor2Monat DATE = EOMONTH(DATEADD(MONTH,-2,GETDATE()))
DECLARE @Vor3Monat DATE = EOMONTH(DATEADD(MONTH,-3,GETDATE()))
DECLARE @Vor4Monat DATE = EOMONTH(DATEADD(MONTH,-4,GETDATE()))
DECLARE @Vor5Monat DATE = EOMONTH(DATEADD(MONTH,-5,GETDATE()))
DECLARE @Vor6Monat DATE = EOMONTH(DATEADD(MONTH,-6,GETDATE()))
DECLARE @Vor7Monat DATE = EOMONTH(DATEADD(MONTH,-7,GETDATE()))
DECLARE @Vor8Monat DATE = EOMONTH(DATEADD(MONTH,-8,GETDATE()))
DECLARE @Vor9Monat DATE = EOMONTH(DATEADD(MONTH,-9,GETDATE()))
DECLARE @Vor10Monat DATE = EOMONTH(DATEADD(MONTH,-10,GETDATE()))
DECLARE @Vor11Monat DATE = EOMONTH(DATEADD(MONTH,-11,GETDATE()))
DECLARE @Vor12Monat DATE = EOMONTH(DATEADD(MONTH,-12,GETDATE()))
DECLARE @Vor12MonatAnfang DATE = DATEADD(day,1,EOMONTH(DATEADD(MONTH,-13,GETDATE())))
DECLARE @LAGER AS INT = 2;


WITH
allemonate AS (
 SELECT FORMAT(@Vor1Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor2Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor3Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor4Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor5Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor6Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor7Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor8Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor9Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor10Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor11Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor12Monat,'yyyy.MM') AS 'ZR'
 UNION SELECT FORMAT(@Vor12MonatAnfang,'yyyy.MM') AS 'ZR'
),
monatEINS AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor1Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor1Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatZWEI AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor2Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor2Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatDREI AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor3Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor3Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatVIER AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor4Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor4Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatFUNF AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor5Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor5Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatSECHS AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor6Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor6Monat
 ORDER BY
  lbp.dZeitstempel DESC
)
,
monatSIEBEN AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor7Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor7Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatACHT AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor8Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor8Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatNEUN AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor9Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor9Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatZEHN AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor10Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor10Monat
 ORDER BY
  lbp.dZeitstempel DESC
)
,
monatELF AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor11Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor11Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatZWOLF AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor12Monat,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor12Monat
 ORDER BY
  lbp.dZeitstempel DESC
),
monatZWOLFANFANG AS (
 SELECT TOP 1
  FORMAT(SUM(IIF(lbp.BuchungsArt = 'Umlagerung WMS',0,lbp.fAnzahl)) OVER (ORDER BY lbp.dZeitstempel ASC),'0') AS 'Bestand Zeitpunkt X',
  FORMAT(@Vor12MonatAnfang,'yyyy.MM') AS 'ZR'
 FROM (
   SELECT
   wehis.dZeitstempel,
   wehis.fAnzahl,
   ba.cName AS 'BuchungsArt'
  FROM
   tWarenlagereinganghistorie wehis
   JOIN tWarenlagereingang we ON we.kWarenLagerEingang = wehis.kWarenLagerEingang
   LEFT JOIN tWarenlagerplatz wlp ON wlp.kWarenLagerPlatz = wehis.kWarenLagerPlatzStart
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = wehis.kBuchungsart
   JOIN tartikel a ON a.kartikel = we.kartikel
   LEFT JOIN tLhm l1 ON l1.kLhm = wehis.kLHMStart
  WHERE
   (wlp.kWarenlager = @LAGER OR wlp.kWarenlager IS NULL)
   AND (a.kArtikel = @KEY)
  UNION ALL
  SELECT
   history.Buchungsdatum AS 'dZeitstempel',
   history.Buchungsmenge AS 'fAnzahl',
   ba.cName AS 'BuchungsArt'
  FROM
   (
   SELECT
    h.dGebucht AS 'Buchungsdatum',
    h.fAnzahl AS 'Buchungsmenge',
    h.kBuchungsart,
    h.kArtikel,
    h.kWarenLagerPlatz
   FROM
    tArtikelHistory h
    JOIN tWarenLagerPlatz wlp ON wlp.kWarenLagerPlatz = h.kWarenLagerPlatz
    JOIN tWarenLager wl ON wl.kWarenLager = wlp.kWarenLager
    WHERE
     CAST('1900-01-01 00:00:00.000' AS DATETIME) <= h.dGebucht
     AND GETDATE() >= h.dGebucht
     AND wl.kWarenLager = @LAGER
   ) AS history
   LEFT JOIN tBuchungsArt ba ON ba.kBuchungsArt = history.kBuchungsart
   JOIN tartikel a ON a.kartikel = history.kartikel
  WHERE
   history.kBuchungsart in (30,31,32,80,100,110,120,130,10,20,170,200)
   AND (a.kArtikel = @KEY)         
  ) lbp
 WHERE
  lbp.dZeitstempel <= @Vor12MonatAnfang
 ORDER BY
  lbp.dZeitstempel DESC
),
Lagerdurchschnitt AS (
 SELECT
  SUM(CAST(CASE
   WHEN a.ZR = FORMAT(@Vor1Monat,'yyyy.MM') THEN ISNULL(m1.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor2Monat,'yyyy.MM') THEN ISNULL(m2.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor3Monat,'yyyy.MM') THEN ISNULL(m3.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor4Monat,'yyyy.MM') THEN ISNULL(m4.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor5Monat,'yyyy.MM') THEN ISNULL(m5.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor6Monat,'yyyy.MM') THEN ISNULL(m6.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor7Monat,'yyyy.MM') THEN ISNULL(m7.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor8Monat,'yyyy.MM') THEN ISNULL(m8.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor9Monat,'yyyy.MM') THEN ISNULL(m9.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor10Monat,'yyyy.MM') THEN ISNULL(m10.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor11Monat,'yyyy.MM') THEN ISNULL(m11.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor12Monat,'yyyy.MM') THEN ISNULL(m12.[Bestand Zeitpunkt X],0)
   WHEN a.ZR = FORMAT(@Vor12MonatAnfang,'yyyy.MM') THEN ISNULL(m12a.[Bestand Zeitpunkt X],0)
  END AS DECIMAL(18,2))) / 13 AS 'Durchschnittlicher-Bestand'
 FROM
  allemonate a
  LEFT JOIN monatEINS m1 ON m1.ZR = a.ZR
  LEFT JOIN monatZWEI m2 ON m2.ZR = a.ZR
  LEFT JOIN monatDREI m3 ON m3.ZR = a.ZR
  LEFT JOIN monatVIER m4 ON m4.ZR = a.ZR
  LEFT JOIN monatFUNF m5 ON m5.ZR = a.ZR
  LEFT JOIN monatSECHS m6 ON m6.ZR = a.ZR
  LEFT JOIN monatSIEBEN m7 ON m7.ZR = a.ZR
  LEFT JOIN monatACHT m8 ON m8.ZR = a.ZR
  LEFT JOIN monatNEUN m9 ON m9.ZR = a.ZR
  LEFT JOIN monatZEHN m10 ON m10.ZR = a.ZR
  LEFT JOIN monatELF m11 ON m11.ZR = a.ZR
  LEFT JOIN monatZWOLF m12 ON m12.ZR = a.ZR
  LEFT JOIN monatZWOLFANFANG m12a ON m12.ZR = a.ZR
)

-- Berechnung Lagerumschlagshäufigkeit = Lagerabgänge / durchschnittlicher Lagerbestand
SELECT
 FORMAT(SUM(lpos.fAnzahl),'0.00') AS 'Versandmenge',
 FORMAT(ld.[Durchschnittlicher-Bestand],'0.00') AS 'durchschnittlicher Lagerbestand',
 FORMAT(SUM(lpos.fAnzahl) / ld.[Durchschnittlicher-Bestand],'0.00') AS 'Lagerumschlagshäufigkeit'
FROM
 tLieferschein l
 LEFT JOIN tLieferscheinPos lpos ON lpos.kLieferschein = l.kLieferschein
 LEFT JOIN Verkauf.tAuftragPosition abpos ON abpos.kAuftragPosition = lpos.kBestellPos
 LEFT JOIN Lagerdurchschnitt ld ON ld.[Durchschnittlicher-Bestand] > 0
WHERE
 l.dErstellt >= @Vor12MonatAnfang
 AND abpos.kArtikel = @KEY
GROUP BY
 ld.[Durchschnittlicher-Bestand]
 
  • Gefällt mir
Reaktionen: ToJo

Werf

Gut bekanntes Mitglied
6. Oktober 2009
375
1
Vielen lieben Dank für den Code.
Aber bei mir kommt immer die Meldung "keine Daten vorhanden"
 

Hanthyphy

Aktives Mitglied
5. Juli 2019
81
8
Hallo @MirkoWK,

vielen Dank, dass du die Abfrage gepostet hast.
Arbeitet ihr produktiv damit?
Wir haben sie bei uns in der Wawi eingepflegt und bekommen recht viele... ich sage mal abenteuerliche Ergebnisse.
Mir ist auch nicht klar, auf welchen Zeitraum sie sich bezieht? 1 Jahr?
 

MirkoWK

Sehr aktives Mitglied
14. März 2022
614
209
Hallo @MirkoWK,

vielen Dank, dass du die Abfrage gepostet hast.
Arbeitet ihr produktiv damit?
Wir haben sie bei uns in der Wawi eingepflegt und bekommen recht viele... ich sage mal abenteuerliche Ergebnisse.
Mir ist auch nicht klar, auf welchen Zeitraum sie sich bezieht? 1 Jahr?
Hi,

die hatte ich mal für unseren Einkauf erstellt, aber ich glaube so recht fließt die Info nicht in das Bestellwesen ein ;).
Pro Artikel sollte es aber nur eine Ergebniszeile geben. Oder habt ihr sie auf IN (@KEYS) umgebaut? Darauf ist die Abfrage nicht wirklich ausgelegt.
Ich denke auch, dass die viel besser umsetzbar wäre, ist aber nach meinem aktuellen SQL-Fähigkeiten entstanden.. .

Auf jeden Fall werden Lagerbewegungen im Zeitraum von einem Jahr berücksichtigt und nach der Formel aus dem Post https://forum.jtl-software.de/threads/berechnung-sql-lagerumschlagshaeufigkeit.206638/post-1101766 berechnet.

Viele Grüße
Mirko
 
Ähnliche Themen
Titel Forum Antworten Datum
Mysteriöse Berechnung Auftrag Spalte Gewinn JTL-Wawi 1.8 0
Neu Berechnung eines Wertes automatisieren Gelöste Themen in diesem Bereich 4
Neu Versandkosten Berechnung im Warenkorb wird nicht aktualisiert JTL-Shop - Fehler und Bugs 1
Neu Bug bei Berechnung von Lieferzeit bei Stücklisten JTL-Wawi - Fehler und Bugs 1
Neu Kundendatenimport via SQL JTL-Wawi 1.6 1
SQL Abfrage für verkaufte Artikel + aktueller Bestand JTL-Wawi 1.8 1
Neu SQL Ausgabe Bestellinformationen JTL Ameise - Eigene Exporte 4
Neu SQL Script - geänderte Tabellen. User helfen Usern - Fragen zu JTL-Wawi 3
Wie kann ich etwas in der WAWI Datenbank per SQL ändern? JTL-Wawi 1.8 2
Datenbank-Abfrage per SQL nach Lagermenge pro Artikel & Warenbereich (WMSLager) JTL-Wawi 1.8 1
Neu Logfile: SQL Fehler, aber warum? JTL-Shop - Fehler und Bugs 2
Beantwortet #GEFUNDEN# Suche jemand , der uns eine (automatische) SQL Abfrage erstellen kann mit Mail Ausgabe Dienstleistung, Jobs und Ähnliches 2
Neu Erstinstallation JTL WaWi 1.8.12 - heruntergeladen wird SQL Express 2017 _statt_ der empfohlenen 2022 Version Installation von JTL-Wawi 8
Neu MS SQL Server 2022 oder MS SQL Server 2022 Express? Installation von JTL-Wawi 8
Neu SQL-Fehler bei Volltextsuche und Sonderzeichen JTL-Shop - Fehler und Bugs 0
Neu SQL-Abfrage bei Kundenanlage JTL-Wawi 1.7 2
Neu einfache SQL Verknüfpung zweier Tabellen, z.B. Artikel mit ArtikelBeschreibung 1.6.46.1 Gelöste Themen in diesem Bereich 13
Neu CSV-Datei direkt in einer SQL-Abfrage verwenden User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Ausgabe der Varko-Auswahl eines Artikels, mehrsprachig Tabelle zwei mal auf sich Joinen? User helfen Usern - Fragen zu JTL-Wawi 5
Neu SQL Abfrage in Excel User helfen Usern - Fragen zu JTL-Wawi 12
Neu SQL-Erfahrene vor - Nach Datenrettung - fehlende Aufträge lassen sich nicht einfügen - Ideen? User helfen Usern 4
Neu Nach Installation eines neuen SQL Servers klappt die Verbindung vom Benutzer-PC zum Server-PC nicht mehr. Installation von JTL-Wawi 5
Neu Fehler SQL-Schema importieren bei Neuinstallation Installation / Updates von JTL-Shop 7
Neu Update MS SQL 2014 auf MS SQL 2022 User helfen Usern - Fragen zu JTL-Wawi 0
Neu SQL Abfrage Artikelbezeichnung auf Englisch für Artikeletikett User helfen Usern - Fragen zu JTL-Wawi 4
Neu Datenbankebene per SQL löschen Eigene Übersichten in der JTL-Wawi 6
Neu MS SQL 14 Express wird langsam voll. Welche Lienzen benötigen wir? Bitte um Hilfe Eigene Übersichten in der JTL-Wawi 27
Neu SQL Abfrage wird mehrfach ausgeführt - Ausgabe in der Übersicht falsch Eigene Übersichten in der JTL-Wawi 8
Upgrade von SQL Server 2014 auf höhere Version JTL-Wawi 1.8 4
1.8.11.0 - Worker SQL lässt System hängen JTL-Wawi 1.8 0
Neu List&Label Merkmale auf Etiketten (SQL) Gelöste Themen in diesem Bereich 3
Neu SQL Server Express 2017 auf 2022 Update Installation von JTL-Wawi 10
Neu Nach SQL Server neuinstallation Benutzer gelöscht? JTL-Wawi - Fehler und Bugs 3
Neu Versandart + Zahlungsart in Rechnungskorrektur (SQL) User helfen Usern - Fragen zu JTL-Wawi 10
SQL Abfrage via Ameise: Seriennummer u. weitere Daten JTL-Wawi 1.8 0
1.8.10.0 - SQL-Job Performance-Optimierung JTL-Wawi 1.8 24

Ähnliche Themen