Statistik - Artikelanzahl pro Auftrag

BenSchmid

Neues Mitglied
13. April 2025
8
0
Hallo zusammen,

ich plane aktuell unseren Pickprozess neu und möchte dafür eine Statistik erstellen, die zeigt, wie viele Positionen unsere Aufträge im Durchschnitt enthalten - also das Verhältnis zwischen Auftragsanzahl und Positionsanzahl.
Beispielsweise könnte die x-Achse die Anzahl der Auftragspositionen und die y-Achse die Anzahl der Aufträge darstellen.

Wir kann ich mir das am Besten auslesen?

Vielen Dank im Voraus!
 

overfl0w23

Sehr aktives Mitglied
19. Oktober 2020
110
58
Celle
Hier eine SQL Abfrage, als Beispiel mit 3 Artikelnummern zum prüfen. Ersetze einfach:

- AUFTRAGSNUMMER1
- AUFTRAGSNUMMER2
- AUFTRAGSNUMMER3

und passe ggf die Datenbank in der ersten Zeile an.



SQL:
USE [eazybusiness];
GO


-- 1) Auftragsliste + Join auf tAuftrag in @o zwischenspeichern
DECLARE @orders TABLE (cAuftragsNr nvarchar(30) PRIMARY KEY);
INSERT INTO @orders VALUES (N'AUFTRAGSNUMMER1'), (N'AUFTRAGSNUMMER2'), (N'AUFTRAGSNUMMER3');


DECLARE @o TABLE (kAuftrag int PRIMARY KEY, cAuftragsNr nvarchar(30));
INSERT INTO @o(kAuftrag, cAuftragsNr)
SELECT a.kAuftrag, a.cAuftragsNr
FROM Verkauf.tAuftrag a
JOIN @orders r ON r.cAuftragsNr = a.cAuftragsNr;


-- 2a) Kompakte Zusammenfassung: nur pickbare Artikel (keine Freipositionen, keine Set-Header)
SELECT
  o.cAuftragsNr,
  SUM(CAST(p.fAnzahl AS float)) AS items_qty_pickable,   -- Stückzahl gesamt
  COUNT(*)                      AS lines_pickable        -- Anzahl pickbarer Zeilen
FROM @o o
JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = o.kAuftrag
WHERE p.kArtikel IS NOT NULL
  AND ISNULL(p.fAnzahl,0) > 0
  AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste <> p.kAuftragPosition)
GROUP BY o.cAuftragsNr
ORDER BY o.cAuftragsNr;


-- 2b) Details der pickbaren Zeilen
SELECT
  o.cAuftragsNr,
  p.kAuftragPosition, p.kArtikel, p.cArtNr, p.cName,
  p.fAnzahl, p.nType, p.kAuftragStueckliste
FROM @o o
JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = o.kAuftrag
WHERE p.kArtikel IS NOT NULL
  AND ISNULL(p.fAnzahl,0) > 0
  AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste <> p.kAuftragPosition)
ORDER BY o.cAuftragsNr, p.kAuftragPosition;


-- 2c) (optional) Alle Positionen inkl. Markierung, warum (nicht) pickbar
SELECT
  o.cAuftragsNr,
  p.kAuftragPosition, p.kArtikel, p.cArtNr, p.cName, p.fAnzahl, p.nType, p.kAuftragStueckliste,
  CASE WHEN p.kArtikel IS NOT NULL AND ISNULL(p.fAnzahl,0)>0
            AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste<>p.kAuftragPosition)
       THEN 1 ELSE 0 END AS is_pickable,
  CASE WHEN p.kAuftragStueckliste IS NOT NULL AND p.kAuftragStueckliste = p.kAuftragPosition
       THEN 1 ELSE 0 END AS is_set_header
FROM @o o
JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = o.kAuftrag
ORDER BY o.cAuftragsNr, p.kAuftragPosition;


Du könntest es dann z.B. in Grafana anzeigen lassen:

Holt sich immer die letzten 30 Tage:

Als Stat:

SQL:
SELECT CAST(AVG(x.items_qty_per_order) AS decimal(10,2)) AS avg_items_per_order_30d
FROM (
  SELECT a.kAuftrag,
         SUM(CAST(p.fAnzahl AS float)) AS items_qty_per_order
  FROM Verkauf.tAuftrag a
  JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = a.kAuftrag
  WHERE a.nStorno = 0
    AND a.nArchiv = 0
    -- feste 30 Kalendertage: heute und die vorigen 29
    AND a.dErstellt >= DATEADD(DAY, -29, CAST(GETDATE() AS date))
    AND a.dErstellt <  DATEADD(DAY,  1,  CAST(GETDATE() AS date))
    AND p.kArtikel IS NOT NULL
    AND ISNULL(p.fAnzahl,0) > 0
    AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste <> p.kAuftragPosition)
  GROUP BY a.kAuftrag
) AS x;


Als Zeitachse:

SQL:
DECLARE @start date = DATEADD(DAY, -29, CAST(GETDATE() AS date));
DECLARE @end   date = CAST(GETDATE() AS date);


WITH per_order AS (
  SELECT
    CAST(a.dErstellt AS date)      AS order_date,
    a.kAuftrag,
    SUM(CAST(p.fAnzahl AS float))  AS items_qty_per_order
  FROM Verkauf.tAuftrag a
  JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = a.kAuftrag
  WHERE a.nStorno = 0
    AND a.nArchiv = 0
    AND a.dErstellt >= @start AND a.dErstellt < DATEADD(DAY,1,@end)
    AND p.kArtikel IS NOT NULL
    AND ISNULL(p.fAnzahl,0) > 0
    AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste <> p.kAuftragPosition)
  GROUP BY CAST(a.dErstellt AS date), a.kAuftrag
)
SELECT
  CAST(order_date AS datetime)                    AS time,
  CAST(AVG(items_qty_per_order) AS decimal(10,2)) AS avg_items_per_order, -- linke Achse (Linie)
  COUNT(*)                                        AS orders_in_day         -- rechte Achse (Bars)
FROM per_order
GROUP BY order_date
ORDER BY order_date;


Gruß
Maurice
 
Ähnliche Themen
Titel Forum Antworten Datum
Statistik: Amazon.de, .be., .fr etc. zusammenfassen zu Amazon (alle Länder) JTL-Wawi 1.9 2
Statistik über Zahlungsmoral der Kunden / Zahlungsverzug möglich? JTL-Wawi 1.9 4
Gewinn wird in Statistik nicht angezeigt JTL-Wawi 1.10 3
Statistik nicht gleiches Ergebnis wie Ameise JTL-Wawi 1.10 4
Neu Plugin: Mengenrabatt im Warenkorb nach Artikelanzahl Plugins für JTL-Shop 0
Alternativtext für Artikelbilder per Ameise pro Plattform setzen JTL-Wawi 1.10 0
Neu Zusätzlicher Kundendisplay für Kassensystem iMin D4 Pro Einrichtung / Updates von JTL-POS 1
Neu JTL Shop - Rabatt pro Kunde möglich ? Allgemeine Fragen zu JTL-Shop 8
Neu Kategorierabatte pro Kunde im JTL-Shop Einrichtung von JTL-Shop4 2
Neu DHL Labels dauern aktuell "ewig", bis zu 30 Sekunden pro Packvorgang JTL-ShippingLabels - Fehler und Bugs 9
Neu Zusatzverpackung pro Artikel berechnen. Geht das? Allgemeine Fragen zu JTL-Shop 5
Neu Marge ausweisen (Gewinn pro Artikel) Eigene Übersichten in der JTL-Wawi 5
Neu 📢 Neues Plugin "JTL Translate Pro" by Nirico.de Plugins für JTL-Shop 0
Brandtexte pro Shop verschieden anzeigen lassen JTL-Wawi 1.10 0
Neu Sortierung/Artikel pro Seite /Galerie vs. Liste ausblenden Templates für JTL-Shop 7
Neu Hilfe bei Anpassung der JTL-Rechnung (v1.9.4.6) – EK pro Stück × Menge als Summe je Position + Privateinlage-Hinweis Dienstleistung, Jobs und Ähnliches 1

Ähnliche Themen