Hochrechnung Absatzzahlen

Hoppel

Aktiver Benutzer
Beiträge
38
Hallo,

ich habe folgendes SQL-Statement:

Code:
select b.Artikelnummer, SUM(ISNULL(b.menge,0)) as Absatzmenge, count(distinct ISNULL(b.adressnummer,0)) as AnzahlKunden, ROUND(SUM(ISNULL(b.Menge,0)*ISNULL(b.Einzelpreis,0)),2) as Umsatz,
ROUND(SUM((ISNULL(b.Einzelpreis,0)*ISNULL(b.Menge,0))-(ISNULL(a.EinkaufsPreis,0)*ISNULL(b.Menge,0))),2) as Nettogewinn
from Bestellungen b, artikel a
where convert(date,b.datum) >='01.01.2016' and  convert(date,b.datum) < '01.05.2016' and a.Artikelnummer = b.Artikelnummer and
a.Artikelnummer in('02-095-E')
group by b.Artikelnummer

order by b.Artikelnummer

Nun möchte ich das Statement so erweitern, dass mir eine weitere Spalte angezeigt wird, mit dem Absatz des vergangenen Jahres, wobei als Grundlage die durchschnittliche Absatzmenge benutzt werden soll. Leider fehlen mir die Kenntnisse, das so umzusetzen.

Habt ihr Ideen?
 
Werbung:
ginge u.a mit einem subselect a la 'select ..., (select ...) from ... '

das in der Klammer ersetzt Du mit dem eigentlichen Select. Gewöhn Dir mal an, JOIN's als solche zu schreiben und nicht Where- und JOIN- - Conditions zu vermengen.
 
Perfekt, das habe ich nun hinbekommen. Mit einer einfachen Aggregat-Funktion avg() komme ich aber noch nicht so weit wie ich möchte. Damit würde ich mir nur die durchschnittliche Absatzzahl für den ganzen Zeitraum (z.B. für vier Monate) ausgeben lassen. Ich möchte aber den monatlichen Durchschnitt.
 
Okay ich habe jetzt für jeden Monat eine Sub-Select gemacht und möchte anschließend den Durchschnitt der vier Monate mir ausgeben lassen. Wenn ich jetzt

Code:
(avg(AbsatzmengeJanuar)+avg(AbsatzmengeFebruar)+avg(AbsatzmengeMärz)+avg(AbsatzmengeApril))/4 as Durchschnitt

probiere, bekomme ich natürlich die Meldung, dass die Spalten nicht bekannt sind. Diese sind ja nur in Sub-Selects "gültig". Irgendwie habe ich mich da gerade verschachtelt.
 
Etwas verwirrend, was genau willst du jetzt berechnen?
Nun möchte ich das Statement so erweitern, dass mir eine weitere Spalte angezeigt wird, mit dem Absatz des vergangenen Jahres
Absatz = Umsatz oder Absatz = Absatzmenge?
als Grundlage die durchschnittliche Absatzmenge
Absatzmenge der letzen 4 Monate, seit dem 01.01. des Jahres oder des Vorjahres?
ich habe jetzt für jeden Monat eine Sub-Select gemacht
Versteif dich nicht auf Subselects pro Monat, das geht sicherlich auch eleganter. Mir ist nur nicht ganz klar was du gegenüber stellst und das muss ja vermutlich auch auf andere Zeiträume anpassbar sein.
 
Absatz = Absatzmenge. Der Umsatz wird separat berechnet.

Die Absatzmenge der ersten vier Monate des Vorjahres als Vergleich.

Ich möchte für einen Artikel jeweils die Absatzmenge des aktuellen Zeitraums (01.01.2016 - 30.04-2016), Umsatz und Nettogewinn ermitteln, sowie eine zusätzliche Spalte mit dem durchschnittlichen Absatz des Zeitraums (01.01.2015-30.04.2015) als Vergleichswert. Damit ich sehe wie sich der Absatz positiv/negativ im Vergleich zum letzten Jahr verändert hat.

Ich hoffe jetzt ist es deutlicher geworden.

Code:
select b.Artikelnummer, SUM(ISNULL(b.menge,0)) as Absatzmenge,
count(distinct ISNULL(b.adressnummer,0)) as AnzahlKunden,
ROUND(SUM(ISNULL(b.Menge,0)*ISNULL(b.Einzelpreis,0)),2) as Umsatz,
ROUND(SUM((ISNULL(b.Einzelpreis,0)*ISNULL(b.Menge,0))-(ISNULL(a.EinkaufsPreis,0)*ISNULL(b.Menge,0))),2) as Nettogewinn,
(select avg(b.menge)
    from Bestellungen b, artikel a
    where convert(date,b.datum) >='01.01.2015' and  convert(date,b.datum) < '01.05.2015' and a.Artikelnummer = b.Artikelnummer and
    a.Artikelnummer in('02-095-E') ) as Absatz2015
from Bestellungen b, artikel a
where convert(date,b.datum) >='01.01.2016' and  convert(date,b.datum) < '01.05.2016' and a.Artikelnummer = b.Artikelnummer and
a.Artikelnummer in('02-095-E')
group by b.Artikelnummer

order by b.Artikelnummer

So soll das ganze am Ende aussehen, einzige Problem ist jetzt noch, dass die durchschnittliche Absatzmenge des kompletten Zeitraums genommen wird und ich gerne den Durchschnitt von Absatz Monat Januar bis Absatz Monat April hätte.

Wenn ich die Sub-Select so verändere:

Code:
select avg(b.menge) as Absatz
    from Bestellungen b, artikel a
    where convert(date,b.datum) >='01.01.2015' and  convert(date,b.datum) < '01.05.2015' and a.Artikelnummer = b.Artikelnummer and
    a.Artikelnummer in('02-095-E')
    group by datepart(month, datum)

bekomme ich zwei Werte für den durchschnittlichen Absatz. Wo liegt mein Denkfehler?
 
Zuletzt bearbeitet:
Wiso gruppierst du denn nach datepart(month,datum)? Für den Zeitraum im WHERE-Teil müssten so bis zu vier Durschnittswerte geliefert werden (wenn in jedem Monat ein Umsatz statt gefunden hat). Ich würde sagen das GROUP BY weglassen dann bekommst du den Durchschnitt auf den gesamten Zeitraum.
 
Werbung:
Zurück
Oben