Neu Artikelverwaltung -> Detaillierte Kindartikelansicht mit Absatz nach Zeiträumen, Lagerreichweite, Zulauf und Retourenquote

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.574
299
Köln
Und in SSMS "Ungültiger Objektname "tartikel""
Das kann nicht sein - es scheint so, als hättest du die falsche Datenbank ausgewählt - ich vermute "Master" statt die Datenbank von der Wawi. Setz einfach mal das ab zum Test: SELECT * FROM tartikel
Im MSSQL Studio sollte eher der Fehler kommen, dass er @Key nicht kennt - da diese Variable von Außen (JTL-Wawi) zur Laufzeit hinzukommt.
 

knackig

Sehr aktives Mitglied
17. November 2011
950
155
Nordhessen
Im MSSQL Studio sollte eher der Fehler kommen, dass er @Key nicht kennt
Daran habe ich gedacht und stattdessen die interne ID eines Vaterartikels genommen. Habe jetzt erstmal in der Datenbank die tartikel-Tabelle rausgesucht und da über das Kontextmenü eine Select-Abfrage generiert. Da dann den Code aus dem 1. Beitrag eingefügt und jetzt kommt der Fehler "Fehler aufgrund einer Division durch Null." Leider zeigt er den Fehler in der Zeile 1, kann es also nicht eindeutig zuordnen.
 

knackig

Sehr aktives Mitglied
17. November 2011
950
155
Nordhessen
Inzwischen kann ich es etwas eingrenzen:

Wenn ich in dem ersten SELECT diese Spalte habe, bekomme ich den Fehler wegen einer Division durch Null:
SQL:
ISNULL(jRetourenGesamt.Retourenquote, '0%') AS 'Retourenquote',

Nehme ich diese Spalte raus, wird die Tabelle im SSMS und in der Wawi korrekt generiert.
 

eco

Sehr aktives Mitglied
4. März 2013
177
29
Super Ansicht! Aber lässt sich eine Zeile mit kumulierten Zeilenwerten über alle VarKombis realisieren, beispielsweise als erste Zeile? Dann hätte man auf einem Blick auch Gesamtzahlen über alle Farben und Größen.
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
318
129
Hannover
[...]
Wenn ich in dem ersten SELECT diese Spalte habe, bekomme ich den Fehler wegen einer Division durch Null
[...]
Das liegt an:
SQL:
LEFT JOIN (
SELECT jabsatzgesamt.tArtikel_kArtikel,
        CONCAT((ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100, '%') as Retourenquote

Ist der Jahresabsatz 0, wird durch 0 geteilt, was mathematisch nicht erlaubt ist. Die Einträge müssen entsprechend durch ein CASE WHEN gefiltert werden:
SQL:
LEFT JOIN (
SELECT jabsatzgesamt.tArtikel_kArtikel,
        CONCAT(CASE WHEN jabsatzgesamt.absatz = 0 THEN 0 ELSE (ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100 END, '%') as Retourenquote
(nicht hinreichend getestet bislang)
 
  • Gefällt mir
Reaktionen: Marvin D. und knackig

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
318
129
Hannover
Habe es getestet und es läuft. Das war der Knackpunkt. Danke :) Jetzt müsste ich schauen, dass die Retourenquote nicht als String mit %, sondern als INT angezeigt wird, da man jetzt nicht danach sortieren kann.
Nimm den Concat raus (mit dem %-zeichen):
SQL:
LEFT JOIN (
SELECT jabsatzgesamt.tArtikel_kArtikel,
        CASE WHEN jabsatzgesamt.absatz = 0 THEN 0 ELSE (ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100 END as Retourenquote

Würde ohnehin Einheiten immer in den Spaltenkopf schreiben. Nie in die Datenzeile (bspw.: Retourenquote in %)
 
  • Gefällt mir
Reaktionen: knackig

Freund_des_Hauses

Aktives Mitglied
14. Oktober 2015
25
12
Mit dieser Änderung sollte es bei allen Artikeln funktionieren.

SQL:
WHERE (kVaterArtikel <>0 AND kVaterArtikel = @Key)
OR (kVaterArtikel = 0 AND nIstVater = 0 AND tartikel.kArtikel = @Key)
OR (nIstVater = 0 AND tartikel.kArtikel = @Key)
ORDER BY cArtNr
 
  • Gefällt mir
Reaktionen: knackig

scootnfruty

Aktives Mitglied
11. Februar 2021
10
0
Erstmal vielen Dank für die tolle Query. Wir haben einige Bestellungen von bestimmten "Dummy" Kundengruppen (bspw. interne Umlagerungen oder Werbeaktionen etc.), die wir normalerweise in Verkaufsstatistiken/Auswertungen (Bspw. via Statistik-Tool) immer rausfiltern.

Wie schaffe ich es denn hier, dass beim Absatz (30, 90, ... Gesamt) bestimmte Kundengruppen nicht beachtet werden? In "Pseudocode" könnte es ungefähr so aussehen, klappt aber (natürlich) nicht bei mir. Hat jemand nen heißen Tipp für das genaue Wording und die Stelle, wo ich das hinschreiben muss? Danke!!

WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
AND tbestellung.cType = 'B'
AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
AND tBestellung.tKunde_kKunde.kKundenGruppe.cName = 'Kundengruppe1' OR 'Kundengruppe2'
 

knackig

Sehr aktives Mitglied
17. November 2011
950
155
Nordhessen
Erstmal vielen Dank für die tolle Query. Wir haben einige Bestellungen von bestimmten "Dummy" Kundengruppen (bspw. interne Umlagerungen oder Werbeaktionen etc.), die wir normalerweise in Verkaufsstatistiken/Auswertungen (Bspw. via Statistik-Tool) immer rausfiltern.

Wie schaffe ich es denn hier, dass beim Absatz (30, 90, ... Gesamt) bestimmte Kundengruppen nicht beachtet werden? In "Pseudocode" könnte es ungefähr so aussehen, klappt aber (natürlich) nicht bei mir. Hat jemand nen heißen Tipp für das genaue Wording und die Stelle, wo ich das hinschreiben muss? Danke!!
Ohne es geprüft zu haben, wenn die Variable stimmt, wäre die Syntax so richtig:

SQL:
AND (tBestellung.tKunde_kKunde.kKundenGruppe.cName = 'Kundengruppe1' OR tBestellung.tKunde_kKunde.kKundenGruppe.cName 'Kundengruppe2')
 
  • Gefällt mir
Reaktionen: scootnfruty