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

arich001

Sehr aktives Mitglied
21. April 2021
315
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
315
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
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 SQL-Server geht eine Stunde nach Allgemeine Fragen zu JTL-Shop 4
Neu Umzug SQL Datenbank auf neuen Server User helfen Usern - Fragen zu JTL-Wawi 2
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 Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 0
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 34
Neu Streichpreise oder Rabatte für Staffelpreise von einem Artikel einrichten? Wie am Besten? JTL-Wawi 1.6 0
Neu DRIGEND HILFE!!! Ebay Abgleich endet mit Arithmetischer Überlauffehler für tinyint-Datentyp, Wert = -1. Die Anweisung wurde beendet. eBay-Anbindung - Fehler und Bugs 4
Neu Stornobeleg für Verkauf ohne Rechnung User helfen Usern - Fragen zu JTL-Wawi 9
Neu Neuentwicklung - Helpdesk für JTL Wawi - Eure Ideen und Wünsche? User helfen Usern - Fragen zu JTL-Wawi 4
Kein changelog für 1.11.8 JTL-Wawi 1.11 29
Text Vorbereitung für WAWI import JTL-Wawi 1.11 3
gelöst: Für diesen User wurde zum angegebenen Mandanten keine Firma gefunden!! JTL-Wawi 1.10 13
Neu Best Practices für den Export und die Automatisierung von täglichen Berichten in JTL‑WaWi User helfen Usern - Fragen zu JTL-Wawi 2
Mobile Web-App für JTL-WaWi — Aufträge, Artikel & Lager direkt vom Smartphone JTL-Wawi App 0
Neu Hilfe bei der Entwicklung gesucht: Werde Tester für meine JTL-Shop Plugins Plugins für JTL-Shop 0
Neu Workflow automatisch bei Warenausgang für Bestand und Puffer JTL-Wawi - Ideen, Lob und Kritik 12
Neu Für fiktive paginierte Kategorieseiten 404 statt 301 Allgemeine Fragen zu JTL-Shop 0
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 294
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

Ähnliche Themen