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

arich001

Sehr aktives Mitglied
21. April 2021
278
34
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
173
16
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
278
34
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
173
16
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
Neu SQL Code für GPSR Felder (Kaufland) zeigt Fehler + wird daher nicht übertragen kaufland.de - Anbindung (SCX) 0
Update SQL Server Management Studio JTL-Wawi 1.10 1
Neu Einrichtung SQL in neuem Rechner funktioniert nicht Installation von JTL-Wawi 3
Neu Update von 1.5.55.5 auf aktuell, welche Reihenfolge, SQL Express auf Standard Installation von JTL-Wawi 10
Neu PayPal - PayPal Checkout - 221 – SQL Fehler Plugins für JTL-Shop 0
Neu Paypal Plugin läßt sich nicht installieren - SQL Fehler Plugins für JTL-Shop 2
Ameisenimport ignoriert Feld "Ist Standardlieferant für Dropshipping" JTL-Wawi 1.10 2
Neu Workflow für bezahlte Aufträge eines bestimmten Lagers → Pickliste zu bestimmter Uhrzeit JTL-Workflows - Ideen, Lob und Kritik 0
Neu Bekomme ich hier im Forum für mein Projekt Support? User helfen Usern 7
Neu Fehlermeldung: Der angegebene Wert für "purchasable_offer" ist ungültig. | Fehlercode(s): (4000001) Amazon-Anbindung - Fehler und Bugs 11
Neu WMS-Lager lässt sich nicht anlegen – Meldung „Sie besitzen keine Lizenz für JTL-WMS“ trotz gebuchtem WMS Start Installation von JTL-WMS / JTL-Packtisch+ 3
Neu PromoBar-Portlet für JTL-Shop 5 – Aktionsleiste, Gutschein & Countdown Plugins für JTL-Shop 0
Neu JTL-Shop-Template Technik – optimiert für Performance & Conversion Templates für JTL-Shop 3
Neu GA4-Tracking für JTL-Shop 5 – sauberes E-Commerce & Kategoriepfade Plugins für JTL-Shop 0
So aktivieren Sie FEFO (Zuweisung des zuerst ablaufenden Bestands) für Arbeitsaufträge. JTL-Wawi 1.10 0
Neu Versandkosten für bestimmte Produkte (AT = 0 €, Ausland = 180 €) Betrieb / Pflege von JTL-Shop 0
Neu Import von SEO Meta Daten für Plattform Woocommerce WooCommerce-Connector 3
Neu Welche URLs/Ports werden für den JTL Worker benötigt? User helfen Usern - Fragen zu JTL-Wawi 8
Neu Suche Dienstleister für Providerwechsel von Domainfactory zu All-Inkl Dienstleistung, Jobs und Ähnliches 12
Neu Suchen Wawi- und Shopspezialist (m/w/d) für Pflege von Bestandssystem inhouse in PLZ 24* Dienstleistung, Jobs und Ähnliches 0
Neu Zusätzliche Daten für jedes Produkt Technische Fragen zu Plugins und Templates 7
JTL-Workflows >> Aufträge >> Ausgeliefert >> Abrechnungsposition für Versandkosten hinzufügen JTL-Wawi 1.10 3
In Diskussion Workflow für das Austauschen von bestelltem Artikel in einem Auftrag gegen einen alternativen Artikel JTL-Workflows - Ideen, Lob und Kritik 3
Neu Import von SEO Meta Daten für Plattform Woocommerce JTL-Ameise - Ideen, Lob und Kritik 0
Neu Versandgewichte exportieren für Anbietervergleich JTL Ameise - Eigene Exporte 4
Neu JTL mit Shopify für Etsy anstatt JTL mit Unicorn2 - hat das jemand gemacht? Anbindung, bestehende Artikel mappen? Multishop? Shopify-Connector 2
Neu Suche Linux-Spezialisten für die Betreuung von unseren Servern Dienstleistung, Jobs und Ähnliches 1
Neu Werte für Merkmale oder Eigenschaften Amazon-Lister - Fehler und Bugs 0
Neu B2B Preis für JTL Wawi -> Amazon aktivieren, nur wie? User helfen Usern - Fragen zu JTL-Wawi 4
Workflow soll wenn Artikel 0 Bestand für 35 Tage hat diesen auf inaktiv setzen JTL-Wawi 1.10 4
Automatischer Workflow für Versand von Gutscheinen versendet den Gutschein nicht JTL-Wawi 1.10 2
Workflow für Benachrichtigung bei Stammkunden JTL-Wawi 1.10 9
Ameise Preisimporte für Marktplätze funktionieren nicht JTL-Wawi 1.10 1
Neu Druckvorlagensets für Kundengruppen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 7
Neu Workflow Versandart prüfen und im Auftrag setzen - speziell für Stücklistenartikel User helfen Usern - Fragen zu JTL-Wawi 0
Neu Seagull Treiber für den Zebra LP2844 JTL-ShippingLabels - Fehler und Bugs 0
Neu In welcher Tabelle werden die Daten für den Amazon Lister 2.0 gespeichert? Amazon-Lister - Fehler und Bugs 5
Neu zweiten Mandanten für Ankauf von Ware? gleiche Firma, gleiche Person. Lizenzen? User helfen Usern - Fragen zu JTL-Wawi 2
Preis im Warenkorb für 10 min sichern, wenn Preis geändert wurde. Ist das möglich? Einrichtung JTL-Shop5 3
Neu Staffelpreise für Metro.de JTL-Ameise - Ideen, Lob und Kritik 0
Neu Auslesen Bestand per Lager für Workflow zur Anzeige im Onlineshop User helfen Usern - Fragen zu JTL-Wawi 4
Einstellungen für den DHL Ausdruck für Retourenetiketten für limango JTL-Wawi 1.10 0
Neu Verschiedene Startseiten für angemeldete und nicht angemeldete Benutzer möglich? Allgemeine Fragen zu JTL-Shop 6
Keine Suchergebnisse für Artikelnummer Lieferant JTL-Wawi 1.10 2
Neu Ankündigung: Entwicklung eines modified-Connectors für JTL-WaWi Modified eCommerce-Connector 0
Neu Eazyedit - KI-Bildbearbeitung für JTL User helfen Usern 0
Neu After-Sales-Marketing für Reputationsmanagement und Kundenbindungsmaßnahme User helfen Usern 0
Kann keinen neuen Export für Google Shopping mehr erstellen Allgemeine Fragen zu JTL-Shop 4
AltTitle für Bilder im WebShop und SEO? Einrichtung JTL-Shop5 1
Neu geplanter Releasetermin für Version 5.5.3? JTL-Shop - Fehler und Bugs 4

Ähnliche Themen