Neu SQL für noch nie Verkaufte Artikel auf Marktplätzen.

arich001

Sehr aktives Mitglied
21. April 2021
309
44
Halöchen,
ich hab mir eine Abfrage gebastelt die mir für alle unsere Marktplätze (JTL-Shops, Amazon, ebay) von jedem Artikel die Tage seit letztem Verkauf anzeigt.
Leider finde ich aber keine Möglichkein da auch echte Penner, also noch nie verkaufte Artikel anzuzeigen.

Meine Abfrage erzeuge ich aus der tArtikelHistory mit unseren Benutzer "18" (Login vom Packtisch)
Andere Ansätze direkt über die Platformen von tArtikelBeschreibung zu gehen hat leider immer zu fehlerhaften Daten geführt

Hat einer ne Idee wie man da vorgehen könnte ?


Hier mein aktueller Code:
SQL:
WITH LetzterWarenausgang AS (
    SELECT
        ah.kArtikel,
        MAX(ah.dGebucht) AS LetztesAusgangsdatum
    FROM tArtikelHistory AS ah
    WHERE
        ah.kBuchungsart = '20'   -- Warenausgang
        AND ah.kBenutzer = '18'  -- Benutzer vom JTL-Packtisch+
    GROUP BY ah.kArtikel
)
SELECT
  a.cArtNr AS 'Artikelnr',
  MAX(ab.cName) AS 'Artikelbeschreibung',  -- Nimmt eine beliebige Beschreibung pro Artikel
  DATEDIFF(day, lw.LetztesAusgangsdatum, GETDATE()) AS 'Tage seit letztem Warenausgang'
FROM
  tArtikel AS a
  JOIN LetzterWarenausgang lw ON a.kArtikel = lw.kArtikel
  LEFT JOIN tArtikelBeschreibung ab ON a.kArtikel = ab.kArtikel AND ab.kSprache = 1
GROUP BY
  a.cArtNr,
  lw.LetztesAusgangsdatum
ORDER BY a.cArtNr ASC;
 

Hematek-Solutions

Gut bekanntes Mitglied
26. März 2012
187
22
Paderborn
Firma
Hematek GmbH
Hi,

das Problem liegt daran, dass du mit deinem JOIN auf die letzte Buchung automatisch alle Artikel ausschließt, die noch nie einen Warenausgang hatten. Dadurch verschwinden die „Penner“ komplett aus der Ergebnisliste.

Du kannst das ganz einfach lösen, indem du von tArtikel ausgehst und einen LEFT JOIN auf die letzten Warenausgänge machst. Zusätzlich kannst du dir auch die erste bekannte Bewegung holen, um einen zeitlichen Bezug zu haben.

Hier ein Beispiel, das alle Artikel anzeigt – inklusive der nie verkauften – und zusätzlich ein Flag [Nie verkauft] mitliefert:



SQL:
WITH LetzterWarenausgang AS (
    SELECT
        ah.kArtikel,
        MAX(ah.dGebucht) AS LetztesAusgangsdatum
    FROM tArtikelHistory AS ah
    WHERE ah.kBuchungsart = 20   -- Warenausgang
    GROUP BY ah.kArtikel
),
ErsteBewegung AS (
    SELECT
        ah.kArtikel,
        MIN(ah.dGebucht) AS ErsteBuchung        -- erste bekannte Buchung (egal ob Zugang/Abgang)
    FROM tArtikelHistory AS ah
    GROUP BY ah.kArtikel
)
SELECT
    a.kArtikel,
    a.cArtNr                                       AS [Artikelnr],
    MAX(ab.cName)                                  AS [Artikelbeschreibung],   -- DE (kSprache=1)
    lw.LetztesAusgangsdatum                        AS [Letzter Warenausgang],
    CASE
        WHEN lw.LetztesAusgangsdatum IS NULL THEN NULL
        ELSE DATEDIFF(DAY, lw.LetztesAusgangsdatum, GETDATE())
    END                                            AS [Tage seit letztem Warenausgang],
    eb.ErsteBuchung                                AS [Erste Bewegung],
    CASE
        WHEN eb.ErsteBuchung IS NULL THEN NULL
        ELSE DATEDIFF(DAY, eb.ErsteBuchung, GETDATE())
    END                                            AS [Tage seit erster Bewegung],
    CASE WHEN lw.kArtikel IS NULL THEN 1 ELSE 0 END AS [Nie verkauft]          -- 1 = Penner
FROM tArtikel a
LEFT JOIN LetzterWarenausgang lw
       ON lw.kArtikel = a.kArtikel
LEFT JOIN ErsteBewegung eb
       ON eb.kArtikel = a.kArtikel
LEFT JOIN tArtikelBeschreibung ab
       ON ab.kArtikel = a.kArtikel
      AND ab.kSprache = 1
GROUP BY
    a.kArtikel, a.cArtNr,
    lw.LetztesAusgangsdatum, lw.kArtikel,
    eb.ErsteBuchung
ORDER BY
    [Nie verkauft] DESC,                            -- Penner zuerst
    [Tage seit letztem Warenausgang] DESC,
    a.cArtNr ASC;
 
  • Gefällt mir
Reaktionen: arich001

arich001

Sehr aktives Mitglied
21. April 2021
309
44
Hi,

das Problem liegt daran, dass du mit deinem JOIN auf die letzte Buchung automatisch alle Artikel ausschließt, die noch nie einen Warenausgang hatten. Dadurch verschwinden die „Penner“ komplett aus der Ergebnisliste.

Du kannst das ganz einfach lösen, indem du von tArtikel ausgehst und einen LEFT JOIN auf die letzten Warenausgänge machst. Zusätzlich kannst du dir auch die erste bekannte Bewegung holen, um einen zeitlichen Bezug zu haben.

Hier ein Beispiel, das alle Artikel anzeigt – inklusive der nie verkauften – und zusätzlich ein Flag [Nie verkauft] mitliefert:



SQL:
WITH LetzterWarenausgang AS (
    SELECT
        ah.kArtikel,
        MAX(ah.dGebucht) AS LetztesAusgangsdatum
    FROM tArtikelHistory AS ah
    WHERE ah.kBuchungsart = 20   -- Warenausgang
    GROUP BY ah.kArtikel
),
ErsteBewegung AS (
    SELECT
        ah.kArtikel,
        MIN(ah.dGebucht) AS ErsteBuchung        -- erste bekannte Buchung (egal ob Zugang/Abgang)
    FROM tArtikelHistory AS ah
    GROUP BY ah.kArtikel
)
SELECT
    a.kArtikel,
    a.cArtNr                                       AS [Artikelnr],
    MAX(ab.cName)                                  AS [Artikelbeschreibung],   -- DE (kSprache=1)
    lw.LetztesAusgangsdatum                        AS [Letzter Warenausgang],
    CASE
        WHEN lw.LetztesAusgangsdatum IS NULL THEN NULL
        ELSE DATEDIFF(DAY, lw.LetztesAusgangsdatum, GETDATE())
    END                                            AS [Tage seit letztem Warenausgang],
    eb.ErsteBuchung                                AS [Erste Bewegung],
    CASE
        WHEN eb.ErsteBuchung IS NULL THEN NULL
        ELSE DATEDIFF(DAY, eb.ErsteBuchung, GETDATE())
    END                                            AS [Tage seit erster Bewegung],
    CASE WHEN lw.kArtikel IS NULL THEN 1 ELSE 0 END AS [Nie verkauft]          -- 1 = Penner
FROM tArtikel a
LEFT JOIN LetzterWarenausgang lw
       ON lw.kArtikel = a.kArtikel
LEFT JOIN ErsteBewegung eb
       ON eb.kArtikel = a.kArtikel
LEFT JOIN tArtikelBeschreibung ab
       ON ab.kArtikel = a.kArtikel
      AND ab.kSprache = 1
GROUP BY
    a.kArtikel, a.cArtNr,
    lw.LetztesAusgangsdatum, lw.kArtikel,
    eb.ErsteBuchung
ORDER BY
    [Nie verkauft] DESC,                            -- Penner zuerst
    [Tage seit letztem Warenausgang] DESC,
    a.cArtNr ASC;
Danke, leider werden jetzt alle jemals verkauften Artikel ausgegeben, auch die die über die Kassen oder Großhandel gingen.
Mein ursprünglicher Ansatz über kPlattform hat leider nicht wirklich fehlerfrei funktioniert.
 

Hematek-Solutions

Gut bekanntes Mitglied
26. März 2012
187
22
Paderborn
Firma
Hematek GmbH
Danke, leider werden jetzt alle jemals verkauften Artikel ausgegeben, auch die die über die Kassen oder Großhandel gingen.
Mein ursprünglicher Ansatz über kPlattform hat leider nicht wirklich fehlerfrei funktioniert.

Kurzlösung: Erst die Plattform-IDs (nPlattform) herausfinden, dann die eigentliche Abfrage mit genau diesen IDs laufen lassen. So bekommst du alle Artikel inkl. derer, die nie über Shop/Amazon/eBay usw. verkauft wurden.

SQL:
SELECT nPlattform, cName
FROM tPlattform
ORDER BY cName;

Ersetze im IN (...) die Platzhalter durch die IDs aus Schritt 1 (z. B. IN (2, 31, 51)).


SQL:
-- Letzter Marktplatz-Verkauf je Artikel (nur die ausgewählten Plattformen)
WITH LetzterMPVerkauf AS (
    SELECT
        bp.tArtikel_kArtikel               AS kArtikel,
        MAX(b.dErstellt)                   AS LetzterMPVerkauf
    FROM tBestellung b
    JOIN tBestellpos bp
         ON bp.tBestellung_kBestellung = b.kBestellung
    JOIN tPlattform p
         ON p.nPlattform = b.nPlatform
    WHERE p.nPlattform IN ( /* <-- HIER DEINE IDs: z.B. 2, 31, 51 */ )
      AND bp.tArtikel_kArtikel IS NOT NULL      -- nur echte Artikelpositionen
      AND ISNULL(b.nStorno, 0) = 0              -- Stornos raus
      -- Optional: nur Warenpositionen (falls bei dir 0 = Artikel):
      -- AND bp.nType = 0
    GROUP BY bp.tArtikel_kArtikel
)
SELECT
    a.kArtikel,
    a.cArtNr                                 AS [Artikelnr],
    MAX(ab.cName)                            AS [Artikelbeschreibung],
    lm.LetzterMPVerkauf                      AS [Letzter MP-Verkauf],
    CASE WHEN lm.LetzterMPVerkauf IS NULL THEN 1 ELSE 0 END AS [Nie auf MP verkauft],
    CASE WHEN lm.LetzterMPVerkauf IS NULL THEN NULL
         ELSE DATEDIFF(DAY, lm.LetzterMPVerkauf, GETDATE()) END AS [Tage seit letztem MP-Verkauf]
FROM tArtikel a
LEFT JOIN LetzterMPVerkauf lm
       ON lm.kArtikel = a.kArtikel
LEFT JOIN tArtikelBeschreibung ab
       ON ab.kArtikel = a.kArtikel AND ab.kSprache = 1
-- Optional: nur aktive, keine Variationsväter:
-- WHERE a.cAktiv = 'Y' AND a.nIstVater = 0
GROUP BY a.kArtikel, a.cArtNr, lm.LetzterMPVerkauf
ORDER BY
    [Nie auf MP verkauft] DESC,
    [Tage seit letztem MP-Verkauf] DESC,
    a.cArtNr ASC;
 
  • Gefällt mir
Reaktionen: arich001
Ähnliche Themen
Titel Forum Antworten Datum
Aktuelles Update 1.11.7: Anmeldedialog merkt sich den letzten User immer noch nicht & falsche Warnung für angeblich fehlendes SQL Server Update JTL-Wawi 1.11 3
Neu Suche Servicepartner für SQL-Abfrage Dienstleistung, Jobs und Ähnliches 2
Neu askJan | Neuer KI-Assistent für JTL-Wawi - schnelle, effiziente und transparente KI-Datenanalyse - ohne SQL! Dienstleistung, Jobs und Ähnliches 41
Kundenstammdaten - "Eigenes Feld" in SQL auslesen JTL-Wawi 1.9 2
Neu Frage zu SQL Statement - Kunden-Kommentar aus Auftrag auf Pickliste User helfen Usern - Fragen zu JTL-Wawi 1
Neu Bestellungen werden verzögert oder nicht gepullt – Ursache: Zeitzonen-Filter im SQL des WooCommerce-Connectors WooCommerce-Connector 0
Neu SQL Worker.tStatus - Bedeutung von nStatus? JTL Ameise - Eigene Exporte 2
Neu JTL-Wawi 1.11.5: Sequenzieller Kundenexport mit Workflow und SQL-Queue Schnittstellen Import / Export 2
Neu Wie lässt sich der Lieferstatus von Aufträgen per SQL abfragen? User helfen Usern - Fragen zu JTL-Wawi 8
Neu JTL Wawi auf Windows Server 2025 mit SQL 2025? Installation von JTL-Wawi 24
Neu JTL Diag / SQL Mitschnitt lässt sich nicht mehr starten User helfen Usern - Fragen zu JTL-Wawi 12
Neu Paypal Checkout Modul für Gambio bis GX 26.x Gambio-Connector 0
Neu Verlinkungen richtig setzen für mehrere Sprachen Allgemeine Fragen zu JTL-Shop 10
Neu JTW Wawi hängt beim Bearbeiten der Druckvorlage für Mahnungen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Wero für den JTL Shop? Plugins für JTL-Shop 21
Neu Bilder von Plattform A auch für Plattform B aktivieren Arbeitsabläufe in JTL-Wawi 1
Neu Exchange Konto kann nicht eingerichtet werden für E-Mail Versand User helfen Usern - Fragen zu JTL-Wawi 2
weitere Angaben für eBay JTL-Wawi 1.11 1
Neu Versandklassen für Kategorien / Unterkategorien bzw. Artikel im Warenkorb User helfen Usern - Fragen zu JTL-Wawi 0
Neu Freelancer gesucht für Artikelpflege ( Herstellerkataloge / Preisänderungen einspielen) Dienstleistung, Jobs und Ähnliches 3
JTL-WAWI Datenbankprofil für neue Windows Benutzer JTL-Wawi 1.11 2
Neu Für die Weiterentwicklung und Betreuung unserer bestehenden Systemlandschaft suchen wir einen erfahrenen Freelancer (m/w/d) mit fundierten Kenntnissen JTL-Wawi App 1
Neu Platzhalter für OPC-Portlets in Seitentext einbauen Allgemeine Fragen zu JTL-Shop 1
Neu kann man JTL POS alleine nutzen für 29 Euro? Einrichtung / Updates von JTL-POS 0
Neu OSS aktiv – Ausnahme für Eventtickets mit deutschem Leistungsort möglich? Allgemeine Fragen zu JTL-Shop 6
Neu Lösung nötig für JTL 1.11+ !!! Fragen rund um LS-POS 3
Neu Widerrufsformular als kostenloses Plugin für Shops ab 5.1.5 Plugins für JTL-Shop 9
Neu Artikelmerkmale für eigenes Exportformat auslesen Betrieb / Pflege von JTL-Shop 1
Gesamtübersicht für Minusbuchen (Lagerbuchungstext) JTL-Wawi 1.10 2
Teilbare Artikel NICHT für Kunden, nur für intern teilbar JTL-Wawi 1.11 5
Neu Neue Preiserhöhung JTL April +~20% für Monatstarife, eingeschränkte "Funktionalitäten" User helfen Usern - Fragen zu JTL-Wawi 279
Neu Jecke Anfrage für Rosenmontag 🎉 – Kamelle & Werbegeschenke gesucht Smalltalk 0
Neu Suche DirectQuery für Kundenkommentar (Rechnung) & Hinweis (Lieferschein) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Coupon für Oberkategorie aktivieren User helfen Usern - Fragen zu JTL-Wawi 0
Neu vollständige Liste/Definition aller Importfelder für die JTL-Ameise JTL-Ameise - Fehler und Bugs 7
Neu Mehrere Label für GLS Retoure nicht möglich? JTL-ShippingLabels - Fehler und Bugs 0
Beantwortet Downloadfunktion für pdf dateien Allgemeine Fragen zu JTL-Shop 10
Neu Im- und Export-Vorlage für eBay Bestandsabgleich JTL-Ameise - Ideen, Lob und Kritik 0
Neu Neues Plugin: Sauberes Meta-Tracking für JTL-Shop 5 (Pixel + CAPI + Consent) Plugins für JTL-Shop 0
Neu 📢 Plugin "Kreditlimit Plugin für JTL-Shop 5 " von CIN GmbH Plugins für JTL-Shop 0
Zweiter Shop an gleichem Mandanten nur für USA JTL-Wawi 1.11 1
Neu Bestimmte 2 Artikel im Warenkorb sorgen für falsche/geringere Versandkosten JTL-Shop - Fehler und Bugs 3
Übersicht für das Lager JTL-Wawi 1.11 1
Hersteller für Verkaufskanal mappen geht nicht JTL-Wawi 1.11 0
Abweichende Attributwerte für POS-Kasse via Ameise importieren JTL-Wawi 1.11 5
Neu eBay Webinar: Dein Business ist bereit für die Weltbühne? News, Events und Umfragen 0
Neu Es werden nicht die gesamter Menge einer Bestellung für die Produktion übernommen; die Bestellung bleibt teilgeliefert. JTL-Plan&Produce - Fehler und Bugs 0
Neu Smarty für "im Zulauf" und "auf Einkaufsliste"? Allgemeine Fragen zu JTL-Shop 7
Neu Betatester gesucht – Hood-Schnittstelle für JTL-Shop 5 Plugins für JTL-Shop 3
Neu FHX One für JTL - Analytics, Monitoring, KI-Texte, Helpdesk uvm. (Otto, Amazon, Shopify, eBay) Dienstleistung, Jobs und Ähnliches 1

Ähnliche Themen