Moin,
ich möchte einen Bericht erstellen, der die Umsätze nach Artikelkategorie in einer Matrix darstellt.
Y-Achse: Artikelkategorie
X-Achse: Monate des Jahres
So lässt sich der Umsatzverlauf nach Kategorie wunderbar erkennen.
Allerdings gelingt mir der Abruf über SQL nicht. Kann jemand helfen?
Mein Code:
SELECT
ar.typ AS Kategorie,
CAST(SUM(CASE WHEN MONTH(r.datum) = 1 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS JAN,
CAST(SUM(CASE WHEN MONTH(r.datum) = 2 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS FEB,
CAST(SUM(CASE WHEN MONTH(r.datum) = 3 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS MRZ,
CAST(SUM(CASE WHEN MONTH(r.datum) = 4 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS APR,
CAST(SUM(CASE WHEN MONTH(r.datum) = 5 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS MAI,
CAST(SUM(CASE WHEN MONTH(r.datum) = 6 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS JUN,
CAST(SUM(CASE WHEN MONTH(r.datum) = 7 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS JUL,
CAST(SUM(CASE WHEN MONTH(r.datum) = 8 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS AUG,
CAST(SUM(CASE WHEN MONTH(r.datum) = 9 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS SEP,
CAST(SUM(CASE WHEN MONTH(r.datum) = 10 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS OKT,
CAST(SUM(CASE WHEN MONTH(r.datum) = 11 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS NOV,
CAST(SUM(CASE WHEN MONTH(r.datum) = 12 THEN rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0) ELSE 0 END) AS UNSIGNED) AS DEZ,
CAST(SUM(rp.umsatz_netto_gesamt - COALESCE(gp.umsatz_netto_gesamt, 0)) AS UNSIGNED) AS Gesamt
FROM rechnung r
JOIN rechnung_position rp ON r.id = rp.rechnung
JOIN artikel ar ON ar.id = rp.artikel
JOIN projekt p ON r.projekt = p.id
LEFT JOIN (
SELECT
gp.auftrag_position_id,
SUM(gp.umsatz_netto_gesamt) AS umsatz_netto_gesamt
FROM gutschrift_position AS gp
JOIN gutschrift g ON gp.gutschrift = g.id
WHERE gp.auftrag_position_id <> 0 AND g.status <> 'angelegt' AND g.status <> 'storniert'
GROUP BY auftrag_position_id
) AS gp ON rp.auftrag_position_id = gp.auftrag_position_id
WHERE
r.status <> 'angelegt' AND r.status <> 'storniert'
AND (YEAR(r.datum) = YEAR(CURDATE()))
AND r.waehrung = 'EUR'
GROUP BY ar.typ;