Gelöst Artikelverwaltung > Artikelverkauf je Kunde

BPD_MR

Aktives Mitglied
13. September 2017
69
7
Hi guys,
auch wir finden die neuen Möglichkeiten unendlich geil, leider spricht hier keiner ordentlich SQL...
Könntet Ihr bitte die Query zur Verfügung stellen, die beim Artikel anzeigt von welchem Kunden er wie oft gekauft wurde?
Würde uns vor allem bei frischen Artikeln gut weiterhelfen...
vielen Dank & big up!!
 
Zuletzt bearbeitet:

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.496
196
Köln
Moin,
Könntet Ihr bitte die Query zur Verfügung stellen, die beim Artikel anzeigt von welchem Kunden er wie oft gekauft wurde?
Jop, bitteschön:

Abverkauf pro Kunde.png

SQL:
-- Standardartikel
SELECT
    tArtikel.cArtNr AS 'ArtNr',
    tKunde.cKundenNr AS Kundennummer,
    CONCAT(tAdresse.cVorname, ' ', tAdresse.cName, ' ', tAdresse.cFirma) AS Kunde,
    ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto), 0.0)), 2) AS 'Ø VK-Netto',
    ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS 'Ø VK-Brutto',    
    COUNT(DISTINCT(tBestellung.kBestellung)) AS Auftraege,
    ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl)), 2) AS Gesamtmenge,
    CASE
        WHEN COUNT(DISTINCT(tBestellung.kBestellung)) > 0 THEN ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl) / COUNT(DISTINCT(tBestellung.kBestellung))), 2)
        ELSE 0
    END AS 'Ø Menge pro Kauf',
    MAX(tBestellung.dErstellt) AS 'Letzter Kauf'
FROM tbestellpos
JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
JOIN tKunde ON tBestellung.tKunde_kKunde = tkunde.kKunde
JOIN tAdresse ON tAdresse.kKunde = tkunde.kKunde
JOIN tartikel ON tartikel.kArtikel = tbestellpos.tArtikel_kArtikel
WHERE tartikel.kArtikel = @Key
    AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
    AND tbestellung.cType = 'B'
GROUP BY    
            tbestellung.tKunde_kKunde,
            tartikel.kVaterArtikel,
            tKunde.cKundenNr,
            tAdresse.cVorname,
            tAdresse.cName,
            tAdresse.cFirma,
            tArtikel.cArtNr

-- Vaterartikel bei Varkombis
UNION
SELECT
    CONCAT('Alle Kinder von: ', jArtikel.cArtNr) AS 'ArtNr',
    tKunde.cKundenNr AS Kundennummer,
    CONCAT(tAdresse.cVorname, ' ', tAdresse.cName, ' ', tAdresse.cFirma) AS Kunde,
    ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto), 0.0)), 2) AS 'Ø VK-Netto',
    ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS 'Ø VK-Brutto',    
    COUNT(DISTINCT(tBestellung.kBestellung)) AS Auftraege,
    ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl)), 2) AS Gesamtmenge,
    CASE
        WHEN COUNT(DISTINCT(tBestellung.kBestellung)) > 0 THEN ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl) / COUNT(DISTINCT(tBestellung.kBestellung))), 2)
        ELSE 0
    END AS 'Ø Menge pro Kauf',
    MAX(tBestellung.dErstellt) AS 'Letzter Kauf'
FROM tbestellpos
JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
JOIN tKunde ON tBestellung.tKunde_kKunde = tkunde.kKunde
JOIN tAdresse ON tAdresse.kKunde = tkunde.kKunde
JOIN tartikel ON tartikel.kArtikel = tbestellpos.tArtikel_kArtikel
JOIN
(SELECT tartikel.kArtikel, cArtNr
    FROM tartikel
    WHERE tartikel.kArtikel = @Key
) AS jArtikel ON 1=1
WHERE tartikel.kVaterArtikel = @Key
    AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
    AND tbestellung.cType = 'B'
GROUP BY    
            tbestellung.tKunde_kKunde,
            tartikel.kVaterArtikel,
            tKunde.cKundenNr,
            tAdresse.cVorname,
            tAdresse.cName,
            tAdresse.cFirma,
            jArtikel.cArtNr
ORDER BY 'Letzter Kauf' DESC
Edit am 28.11.2019:
- Auswahl eines Vaterartikels wertet alle Kindartikelverkäufe aus
- VK Netto und VK Brutto werden beide nun angezeigt
 
Zuletzt bearbeitet:

redheadman

Aktives Mitglied
3. August 2016
16
3
Wäre es möglich in die Query oben auch eine Spalte mit dem VK netto Preis einzufügen!

Vielen Dank
Denke das sollte passen:

Code:
SELECT
    tartikel.cArtNr AS ArtNr,
    jVerkaufProKunde.Kundennummer,
    jVerkaufProKunde.Kunde,
    jVerkaufProKunde.vk AS 'Ø VK-Netto',
    jVerkaufProKunde.Auftraege,
    jVerkaufProKunde.Gesamtmenge,
    jVerkaufProKunde.DurchschnittProKauf AS 'Ø Menge pro Kauf',
    CONVERT(VARCHAR, jVerkaufProKunde.LetzterKauf, 104) AS 'Letzter Kauf'
FROM tartikel
LEFT JOIN (
    SELECT    tArtikel_kArtikel,
            tKunde.cKundenNr AS Kundennummer,
            CONCAT(tAdresse.cVorname, ' ', tAdresse.cName, ' ', tAdresse.cFirma) AS Kunde,
            ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto), 0.0)), 2) AS vk,
            COUNT(DISTINCT(tBestellung.kBestellung)) AS Auftraege,
            ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl)), 2) AS Gesamtmenge,
            CASE
                WHEN COUNT(DISTINCT(tBestellung.kBestellung)) > 0 THEN ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl) / COUNT(DISTINCT(tBestellung.kBestellung))), 2)
                ELSE 0
            END AS DurchschnittProKauf,
            MAX(tBestellung.dErstellt) AS LetzterKauf
    FROM tbestellpos
    JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
    JOIN tKunde ON tBestellung.tKunde_kKunde = tkunde.kKunde
    JOIN tAdresse ON tAdresse.kKunde = tkunde.kKunde
    WHERE tbestellpos.tArtikel_kArtikel = @Key
        AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        AND tbestellung.cType = 'B'
    GROUP BY    tbestellung.tKunde_kKunde,
                tArtikel_kArtikel,
                tKunde.cKundenNr,
                tAdresse.cVorname,
                tAdresse.cName,
                tAdresse.cFirma
) AS jVerkaufProKunde ON jVerkaufProKunde.tArtikel_kArtikel = tartikel.kArtikel
WHERE tartikel.kArtikel = @Key
ORDER BY jVerkaufProKunde.LetzterKauf DESC
 

Über uns

  • In unserem moderierten JTL-Forum könnt Ihr Euch themenbezogen mit der JTL-Community rund um die Produkte von JTL, passende Erweiterungen und den E-Commerce im Allgemeinen austauschen, Tipps und Tricks teilen sowie Verbesserungswünsche und Fehler diskutieren.

    Unsere Forumsnutzer helfen sich untereinander auch gerne weiter, wenn Sie mal nicht weiterkommen oder einen Ratschlag benötigen.

Schnell-Navigation

Benutzer Menü