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

arich001

Sehr aktives Mitglied
21. April 2021
316
48
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
316
48
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
Für Ihren SQL-Server wurde ein Service Pack zur Verfügung gestellt - nö, gelogen, wie kriege ich die Meldung weg? JTL-Wawi 1.11 15
Neu Dedicated SQL Server am Limit Merkmale Betrieb / Pflege von JTL-Shop 1
ändern von Servernamen nach Neuinstallation von SQL und Verbindung mit neuem Server in der Wawi JTL-Wawi 2.0 2
Neu Arbeiten mit Lieferanten EKs - Workflows und SQL User helfen Usern - Fragen zu JTL-Wawi 6
Neu JTL → Shopify Connector: MappingTablesException / „Endpoint id is empty“ – betroffene Artikel aus Logs per SQL finden Shopify-Connector 2
welche Microsoft SQL Server Version läuft am stabilsten? JTL-Wawi 2.0 2
Neu MS Server und MS SQL Installation von JTL-Wawi 5
WMS Lagerbestand Bezeichnung in SQL Datenbank JTL-Wawi 1.11 2
Wawi Meldung SQL Servicepack zu installieren - aber welches? Update SQL2022 CU24 nicht möglich JTL-Wawi 1.11 6
CSV Exportvorlage - SQL Abfrage Eigenes Feld JTL-Wawi 2.0 4
Keine Rückmeldung in JTL Wawi sobald SQL Server Memory durch Database Cache ausgeslastet ist JTL-Wawi 2.0 9
Update auf 1.11 verlangt ein Update auf aktuelleren SQL Server JTL-Wawi 1.11 7
Neu SQL Lagerbestand minus in Aufträgen Eigene Übersichten in der JTL-Wawi 4
Neu SQL-Server geht eine Stunde nach Allgemeine Fragen zu JTL-Shop 4
Neu Individuelle Software, Web & Automatisierung für den E-Commerce – Nodarix GmbH Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt User helfen Usern - Fragen zu JTL-Wawi 6
In Diskussion Workflow für Erinnerungen an bevorstehende Lieferungen JTL-Workflows - Ideen, Lob und Kritik 0
Neu Wie stelle ich Retouren in JTL für DPD ein? JTL-ShippingLabels - Ideen, Lob und Kritik 1
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Wroker macht keinen abgleich für Kaufland JTL-Wawi 2.0 8
Neu Beta-Tester gesucht: Produktdaten aus Artikelfotos schneller für JTL/CSV vorbereiten Dienstleistung, Jobs und Ähnliches 0
Neu Kundengruppeneinstellungen für Mindestabnahme und Abnahmeintervall löschen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Wie lange braucht ihr aktuell für die Anlage eines neuen Artikels? JTL-Wawi App 3
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
In Diskussion Tool für Abrechnung von Fulfillment Dienstleistungen Arbeitsabläufe im Fulfillment Network 0
Neu Widerrufsbutton für JTL-Shop 4 Allgemeine Fragen zu JTL-Shop 17
Neu Keine Labels für Warenpost international über Packtisch JTL-ShippingLabels - Fehler und Bugs 8
Neu Laut Backend Shop Update für Shop 5.71 - Download nicht zu finden? Betrieb / Pflege von JTL-Shop 3
Neu Meta Shop seit September 2025: JTL-Lösung für neue Checkout-URL gesucht Allgemeine Fragen zu JTL-Shop 0
Angebliche externe Aufträge "für Rechnungserstellung freigeben" und Rechnungen erstellen. Gibt es dazu eine akzeptable Erklärung von JTL? JTL-Wawi 1.11 1
Neu Artikelname & Beschreibung angepasst für jeweiligen Marktplatz Arbeitsabläufe in JTL-Wawi 1
Neu OnFinds: KI-Suche für JTL-Shop mit fairer Abrechnung nach Artikelanzahl. 30 Tage kostenlos testen Plugins für JTL-Shop 0
API 2.1 für OnPrem? JTL-Wawi 2.0 6
Neu Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu Neue Kennzeichnungspflicht für Elektrogeräte (Altgeräterücknahme) Betrieb / Pflege von JTL-Shop 4
Neu Freelancer für JTL-Wawi, Shop & Prozessautomatisierung Dienstleistung, Jobs und Ähnliches 2
Neu Exportgenehmigung / Ausfuhrgenehmigung automatisch für Auslandskunden als Aufpreis Allgemeine Fragen zu JTL-Shop 2
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Neu Seller2Go – Mobile App & JTL-Plugin für Bestellungen, Support und Produktmanagement Plugins für JTL-Shop 0
Neu Neues Plugin: Erweiterter Widerrufsbutton für JTL-Shop Plugins für JTL-Shop 9
JTL-Worker 2.0 - Einrichtung als Dienst - Auffälligkeiten und Problemlösungen für manche JTL-Wawi 2.0 3
Neu Muss man für DHL Versenden 4.0 einen neuen Benutzer bei DHL anlegen? JTL-ShippingLabels - Ideen, Lob und Kritik 2
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 5
Neu Neue Tracking-URL für DPD JTL-ShippingLabels - Fehler und Bugs 4
AboutYou keine Felder für GPSR Daten SCX-(Ninepoint)-Anbindungen 0
globale Angebotsvorlage anpassen für eBay Angebote "Artikelspezifisch" JTL-Wawi 1.11 0
Neu Connectorupdates für Shopware 6.7.7 bzw 6.7.8? Shopware-Connector 39
Neu Streichpreise oder Rabatte für Staffelpreise von einem Artikel einrichten? Wie am Besten? JTL-Wawi 1.6 0

Ähnliche Themen