MySQL Abfrage artikelbezogener Umsatz pro Jahr ?
Hallo liebe "Helfergemeinde"
Unser Warenwirtschaftssystem basiert auf einer MySQL Datenbank. (5.0.51b)
Da dieses Programm jedoch auswertungstechnisch nicht sehr viel hergibt mache ich viele Spezialauswertungen (Umsatzstatistiken, Lagerstückzahlen,...) im Excel (VBA)
Nun zu meinem Problem .
In der Tabelle "fpositionen" werden alle Artikel aufgeführt die verkauft werden. (Verkaufsdatum-Artikelnummer-Artikelname-Gesamtpreis-Menge)
Das heißt: Jedes mal wenn ein Artikel verkauft wird, wird eine neue Zeile eingefügt. Aus dieser Tabelle möchte ich nun eine Abrfage generieren.
Folgende Abfrage habe ich schon: (vereinfacht auf mein Grundproblem)
SELECT `Artikelname`, SUM(`Gesamtpreis`), SUM(`Menge`)
FROM `mand9`.`fpositionen`
GROUP BY `Artikelnummer`
Das ergibt ja folgendes Abfrageergebnis: Artikelname - Summe des Gesamtpreises - Summe der Menge
Nun möchte ich aber folgendes Abfrageergebnis:
Artikelname - Summe des Gesamtpreises - Summe der Menge - Summe des Gesamtpreises im Jahr 2008 - Summe der Menge im Jahr 2008 - Summe des Gesamtpreises im Jahr 2009 - Summe der Menge im Jahr 2009 - . . .
Mit dem Zusatz in der Abfrage WHERE `Verkaufsdatum` LIKE '2008%' kann ich ja die Abfrage auf ein Jahr beschränken.
Mein Lösungsansatz war: Für jedes Jahr eine eigene Abfrage machen und die Spalten im Excel nebeneinander einfügen. Nun ist dabei aber das Problem dass manche Artikel in einem Jahr nicht verkauft worden sind. Wenn ich jetzt die Abfrageergebnisse in Excel nebeneinander lege und zum Beispiel im Jahr 2009 der Artikel "Schlagmichnich" nicht verkauft worden ist, dann verschieben sich total die Zeilen und es stimmt nichts mehr.
Hat jemand eine Idee wie ich so etwas in eine Abfrage packen könnte?
Vielen Dank.
schöne Grüße
Whirly
Unser Warenwirtschaftssystem basiert auf einer MySQL Datenbank. (5.0.51b)
Da dieses Programm jedoch auswertungstechnisch nicht sehr viel hergibt mache ich viele Spezialauswertungen (Umsatzstatistiken, Lagerstückzahlen,...) im Excel (VBA)
Nun zu meinem Problem .
In der Tabelle "fpositionen" werden alle Artikel aufgeführt die verkauft werden. (Verkaufsdatum-Artikelnummer-Artikelname-Gesamtpreis-Menge)
Das heißt: Jedes mal wenn ein Artikel verkauft wird, wird eine neue Zeile eingefügt. Aus dieser Tabelle möchte ich nun eine Abrfage generieren.
Folgende Abfrage habe ich schon: (vereinfacht auf mein Grundproblem)
SELECT `Artikelname`, SUM(`Gesamtpreis`), SUM(`Menge`)
FROM `mand9`.`fpositionen`
GROUP BY `Artikelnummer`
Das ergibt ja folgendes Abfrageergebnis: Artikelname - Summe des Gesamtpreises - Summe der Menge
Nun möchte ich aber folgendes Abfrageergebnis:
Artikelname - Summe des Gesamtpreises - Summe der Menge - Summe des Gesamtpreises im Jahr 2008 - Summe der Menge im Jahr 2008 - Summe des Gesamtpreises im Jahr 2009 - Summe der Menge im Jahr 2009 - . . .
Mit dem Zusatz in der Abfrage WHERE `Verkaufsdatum` LIKE '2008%' kann ich ja die Abfrage auf ein Jahr beschränken.
Mein Lösungsansatz war: Für jedes Jahr eine eigene Abfrage machen und die Spalten im Excel nebeneinander einfügen. Nun ist dabei aber das Problem dass manche Artikel in einem Jahr nicht verkauft worden sind. Wenn ich jetzt die Abfrageergebnisse in Excel nebeneinander lege und zum Beispiel im Jahr 2009 der Artikel "Schlagmichnich" nicht verkauft worden ist, dann verschieben sich total die Zeilen und es stimmt nichts mehr.
Hat jemand eine Idee wie ich so etwas in eine Abfrage packen könnte?
Vielen Dank.
schöne Grüße
Whirly
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166397
Url: https://administrator.de/contentid/166397
Ausgedruckt am: 23.11.2024 um 00:11 Uhr
5 Kommentare
Neuester Kommentar
Moin Whirly,
in der Regel löse ich Probleme wie das vorliegende mit einer Hilfstabelle ("Zeitdimensionen"), die in der erfordelichen Granularität die auszuwertenden Zeiträume enthält.
Also eine Struktur mit mindestens den Spalten "Jahr", "Quartal", Monat", in die du von Hand oder per Prozedur lückenlos alle Werte von meinetwegen 2008 bis 2025 einträgst.
Gegen diese Tabelle kannst du deine Tabelle (die ja mindestens ein Datumsfeld enthält) mit einem LEFT JOIN oder einem FULL OUTER JOIN verknibbeln.
Grüße
Biber
in der Regel löse ich Probleme wie das vorliegende mit einer Hilfstabelle ("Zeitdimensionen"), die in der erfordelichen Granularität die auszuwertenden Zeiträume enthält.
Also eine Struktur mit mindestens den Spalten "Jahr", "Quartal", Monat", in die du von Hand oder per Prozedur lückenlos alle Werte von meinetwegen 2008 bis 2025 einträgst.
Gegen diese Tabelle kannst du deine Tabelle (die ja mindestens ein Datumsfeld enthält) mit einem LEFT JOIN oder einem FULL OUTER JOIN verknibbeln.
Grüße
Biber
Hallo mal eben
Ich bin hauptberuflicher Datenbankentwickler. Nur werden mir die Fragen und Aufgaben halt etwas anders gestellt.
Ich bin mich gewohnt, dass ich das IST erhalte und das SOLL liefere.
Es ist hier natürlich schwierig, die ganzen Tabellen und Beziehungen abzubilden.
Das "unperformant" (danke für das Wort, finde ich sehr gut formuliert) stimmt natürlich und man könnte sogar böse Worte
wie "Gebastel" dafür verwenden. Nun ja, vor 12 Jahren fing ich auch so an. Das bessert sich laufend mit der Erfahrung.
Auch etwas Literatur (SQL generell) schadet nicht.
Nun ist Ihre Frage damit letztendlich nnicht beantwortet, das weiss ich.
Man hat mich hier schon über meine schweizer Webseite Kublidata . ch kontaktiert, wo ich dann meine Mailadresse
preis gab.
Und sonst: viel Performanz. Ich bin sicher dass Sie das schaffen werden!
Gruss Kudata
Ich bin hauptberuflicher Datenbankentwickler. Nur werden mir die Fragen und Aufgaben halt etwas anders gestellt.
Ich bin mich gewohnt, dass ich das IST erhalte und das SOLL liefere.
Es ist hier natürlich schwierig, die ganzen Tabellen und Beziehungen abzubilden.
Das "unperformant" (danke für das Wort, finde ich sehr gut formuliert) stimmt natürlich und man könnte sogar böse Worte
wie "Gebastel" dafür verwenden. Nun ja, vor 12 Jahren fing ich auch so an. Das bessert sich laufend mit der Erfahrung.
Auch etwas Literatur (SQL generell) schadet nicht.
Nun ist Ihre Frage damit letztendlich nnicht beantwortet, das weiss ich.
Man hat mich hier schon über meine schweizer Webseite Kublidata . ch kontaktiert, wo ich dann meine Mailadresse
preis gab.
Und sonst: viel Performanz. Ich bin sicher dass Sie das schaffen werden!
Gruss Kudata
Moin Whirly,
nein, das Wort "unperformant" gibt es nicht - deine Abfrage ist "inperformant"
Was an meiner Skizze ist denn unverständlich?
Leg doch mal eine Spieltabelle "zeitdimensionen" an für diese 3 Jahre, füll es mit Daten und poste die Struktur/das CREATE TABLE.
Dann schauen wir weiter - und das hier im Beitrag.
Grüße
Biber
nein, das Wort "unperformant" gibt es nicht - deine Abfrage ist "inperformant"
Was an meiner Skizze ist denn unverständlich?
Leg doch mal eine Spieltabelle "zeitdimensionen" an für diese 3 Jahre, füll es mit Daten und poste die Struktur/das CREATE TABLE.
Dann schauen wir weiter - und das hier im Beitrag.
Grüße
Biber