Gelöst Artikelverwaltung > Artikelverkauf je Kunde

BPD_MR

Aktives Mitglied
13. September 2017
75
8
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.532
221
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
40
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
 

designer

Offizieller Servicepartner
SPBanner
20. Juli 2009
225
5
@Thomas Lisson
Beim Listview gibt es noch folgenden Fehler:
- Artikel wird in Auftrag zugefügt (Preis z.B. 380.-)
- Anschliessend wird später der Preis angepasst (Preis z.B. 340.-) und via POS verkauft
- Es wird in der Auswertung der Ursprüngliche Preis (Preis z.B. 380.-) genommen, und nicht der angepasste (Preis z.B. 340.-) was dem tatsächlichen Verkaufspreis entspricht.
 

mariox

Aktives Mitglied
6. Januar 2018
24
1
Hallo,

ist richtig Klasse. Könnte man den SQL Code noch mit "Verkaufsplattformen" und "Lieferländer" erweitern?
 

FEAL

Aktives Mitglied
26. Februar 2017
37
3
Vielen Dank erstmal, für die tolle Abfrage!
Ich hab allerdings einen Fehler entdeckt. In der Liste sind manche Kunden mehrmals aufgeführt. Dadurch passiert folgendes:

Ein Kunde von mir hat 4 x Bestellt, die Menge in der Liste ist mit 50 Angegeben was korrekt ist.
Dadurch dass er 2 in der Liste auftaucht, ist zudem noch der Gleiche Kunde mit der Menge 100 angegeben.

Ich glaube ich hab den Fehler auch gefunden. Wenn ein Kunden mehrere Lieferadressen hat, steht er mehrmals in der Liste drin. Für jede Lieferadresse steht dann die Menge in der Liste und zusätzlich wird alles noch addiert.

Wäre super, wenn der Fehler noch behoben werden könnte!

Lieben Dank!
 

designer

Offizieller Servicepartner
SPBanner
20. Juli 2009
225
5
Die Berechnung der Spalten "Gesamtmenge" und "Menge pro Kauf" sind fehlerhaft, es werden falsche Werte ausgegeben, siehe Screenshot
Ticket_5880_2K.jpg
 

redheadman

Aktives Mitglied
3. August 2016
40
3
Hallo,
finde es bis jetzt alles Super, aber kann man auch anstatt dem Ø VK-Netto Preis, den wirklich letzten Netto Verkaufspreis anzeigen lassen?

Beste Grüße
 

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.532
221
Köln
Hi zusammen,

ist richtig Klasse. Könnte man den SQL Code noch mit "Verkaufsplattformen" und "Lieferländer" erweitern?
Meinst du das macht an der Stelle Sinn Verkaufsplattformen und Lieferländer anzuzeigen? Aktuell ist die Ansicht ja pro Kunde angesetzt. Passiert es wirklich so oft, dass ein und derselbe Kunde unterschiedliche Verkaufsplattformen oder Lieferländer nutzt? Es wäre wohl hier besser folgende LVE zu nutzen: https://forum.jtl-software.de/threads/artikelverwaltung-aktivitaet-pro-plattform.123458/

Beim Listview gibt es noch folgenden Fehler:
- Artikel wird in Auftrag zugefügt (Preis z.B. 380.-)
- Anschliessend wird später der Preis angepasst (Preis z.B. 340.-) und via POS verkauft
- Es wird in der Auswertung der Ursprüngliche Preis (Preis z.B. 380.-) genommen, und nicht der angepasste (Preis z.B. 340.-) was dem tatsächlichen Verkaufspreis entspricht.
Hmm, die Abfrage bezieht sich auf das, was im Auftrag unter Verkaufspreis steht. Wenn du das so über POS verkaufst, wie sieht der Auftrag in der Wawi dazu aus?

Ich hab allerdings einen Fehler entdeckt. In der Liste sind manche Kunden mehrmals aufgeführt.
Vielen Dank dafür, Fehler wurde beseitigt und korrigiert ganz oben im Beitrag #2 im SQL.

Die Berechnung der Spalten "Gesamtmenge" und "Menge pro Kauf" sind fehlerhaft, es werden falsche Werte ausgegeben, siehe Screenshot
Das wird am gleichen Fehler bei mehreren Adressen pro Kunde gelegen haben. Sollte somit auch gelöst sein.

finde es bis jetzt alles Super, aber kann man auch anstatt dem Ø VK-Netto Preis, den wirklich letzten Netto Verkaufspreis anzeigen lassen?
Das funktioniert leider nicht, da wir beim Markieren eines Vaterartikels pro Kunde dann alle Kindartikel betrachten. Somit kann kein expliziter letzter VK angegeben werden, da der Kunde mehrere Kindartikel des gleichen Vaters gekauft haben kann.
 

designer

Offizieller Servicepartner
SPBanner
20. Juli 2009
225
5
Hi zusammen,


Meinst du das macht an der Stelle Sinn Verkaufsplattformen und Lieferländer anzuzeigen? Aktuell ist die Ansicht ja pro Kunde angesetzt. Passiert es wirklich so oft, dass ein und derselbe Kunde unterschiedliche Verkaufsplattformen oder Lieferländer nutzt? Es wäre wohl hier besser folgende LVE zu nutzen: https://forum.jtl-software.de/threads/artikelverwaltung-aktivitaet-pro-plattform.123458/


Hmm, die Abfrage bezieht sich auf das, was im Auftrag unter Verkaufspreis steht. Wenn du das so über POS verkaufst, wie sieht der Auftrag in der Wawi dazu aus?


Vielen Dank dafür, Fehler wurde beseitigt und korrigiert ganz oben im Beitrag #2 im SQL.


Das wird am gleichen Fehler bei mehreren Adressen pro Kunde gelegen haben. Sollte somit auch gelöst sein.


Das funktioniert leider nicht, da wir beim Markieren eines Vaterartikels pro Kunde dann alle Kindartikel betrachten. Somit kann kein expliziter letzter VK angegeben werden, da der Kunde mehrere Kindartikel des gleichen Vaters gekauft haben kann.
Habe die neuste Version von #2 ausprobiert, die Gesamtmenge stimmen immer noch nicht überein. (Zeitraum von Artikelstatistik erfasst den ganzen Zeitraum des Kunden seit Start mit Wawi)
1586239073353.png