Neu Berechnung / SQL - Lagerumschlagshäufigkeit

MirkoWK

Sehr aktives Mitglied
14. März 2022
683
242
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
683
242
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
88
9
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
683
242
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
Sql Abfrage VK Preise pro Kundengruppe für Grafana JTL-Wawi 1.8 4
Neu SQL Query zum Bilder löschen Arbeitsabläufe in JTL-Wawi 3
Neu List & Label - Eigene SQL-Abfrage als Grundlage für Tabelle im Berichtscontainer? User helfen Usern - Fragen zu JTL-Wawi 10
Neu SQL Server kein Mandant auswählbar und Dienst lässt sich nicht starten Installation von JTL-Wawi 2
Neu Ameise-Vorlage per SQL abrufen und Daten als Ergebnis erhalten JTL Ameise - Eigene Exporte 1
Neu SQL DB läuft mit Fehler voll und crasht Server JTL-Shop - Fehler und Bugs 1
Neu SQL Vartable für Reservierte Artikel gesucht User helfen Usern - Fragen zu JTL-Wawi 2
Neu Innerhalb einer Variable -SQL Abfrage- das Wort "fett" schreiben Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu SQL Eigener Export - Eigene Felder im Auftrag User helfen Usern - Fragen zu JTL-Wawi 7
Neu Wie finde ich per SQL heraus welche Aufträge auf Teillieferbar stehen? JTL Ameise - Eigene Exporte 1
Neu Microsoft SQL unter MS365 Installation von JTL-Wawi 2
Neu SQL Abfrage, 3. Mahnstufe User helfen Usern - Fragen zu JTL-Wawi 1
Neu Variable oder SQL zum Feld "Gewinn netto" (im Auftrag) Eigene Übersichten in der JTL-Wawi 9
Neu SQL Code zur Ausgabe des Verkaufspreis je Kundengruppe User helfen Usern 1
Neu MS SQL Server auf Windows vs Linux Starten mit JTL: Projektabwicklung & Migration 9
Beantwortet Hilfe bei SQL Abfrage erbeten User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Abfrage - Sendungsnummern als Liste nach Datum Schnittstellen Import / Export 2
Neu DB: kPlattform eines Auftrages ändern (SQL) - Zwecks Lagerplatzreservierung User helfen Usern - Fragen zu JTL-Wawi 0
Neu SQL prozeduren mit #temp Tabellen Eigene Übersichten in der JTL-Wawi 28
Neu Ameise Export in SQL Abfrage umwandeln User helfen Usern - Fragen zu JTL-Wawi 11
Neu Ware direkt in ein Standardlager einbuchen per SQL StoreProcedure dbo.spWarenlagerEingangSchreiben Schnittstellen Import / Export 9
Neu List & Label Vorlagen: SQL Injection Warnung umgehen um Datenquelle zu ergänzen User helfen Usern - Fragen zu JTL-Wawi 12

Ähnliche Themen