MySQL Forums
Forum List  »  German

UNION ALL mit Zwischensummen
Posted by: Roger Elsig
Date: April 24, 2016 01:00PM

Hallo zusammen

Ich kämpfe mit folgendem SQL Statement

SELECT DATE_FORMAT(erstellungsdatum , '%d.%m.%Y') as Datum, abrechnungstyp, Person, Betrag AS Guthaben, SUM(Betrag) as Total FROM
(
(
SELECT erstellungsdatum, abrechnungstyp, kl_1_name AS Person, guthaben_kl_1 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Bevölkerungskurs' AND guthaben_kl_1 != 0 AND abgerechnet = 0
)
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, kl_2_name, guthaben_kl_2 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Bevölkerungskurs' AND guthaben_kl_2 != 0 AND abgerechnet = 0
)
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, helfer_name, guthaben_helfer, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Bevölkerungskurs' AND guthaben_helfer != 0 AND abgerechnet = 0
)
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_1_name, abzuege_total as Betrag , NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Diverses' AND betrag_1 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, kl_1_name AS Person, guthaben_kl_1 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Firmenkurs' AND guthaben_kl_1 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, kl_2_name, guthaben_kl_2 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Firmenkurs' AND guthaben_kl_2 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, helfer_name, guthaben_helfer as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Firmenkurs' AND guthaben_helfer != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_1_name AS Person, abzuege_total as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Termine und Übungen' AND abzuege_total != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_1_name AS Person, abzuege_total as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Help' AND abzuege_total != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_1_name AS Person, betrag_1 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_1 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_2_name AS Person, betrag_2 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_2 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_3_name AS Person, betrag_3 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_3 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_4_name AS Person, betrag_4 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_4 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_5_name AS Person, betrag_5 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_5 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_6_name AS Person, betrag_6 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_6 != 0 AND abgerechnet = 0
) 
UNION ALL
(
SELECT  erstellungsdatum, abrechnungstyp, person_7_name AS Person, betrag_7 as Betrag, NULL
FROM svbg_abrechnungen 
WHERE svbg_abrechnungen.abrechnungstyp = 'Kleidersammlung' AND betrag_7 != 0 AND abgerechnet = 0
) 
) 
as liste_abrechnungen

GROUP BY Person ASC, Datum DESC WITH ROLLUP

Da ich irgendwie kein Bild anhängen kann werde ich versuchen das Resultat zu beschreiben.

Diese Abfrage listet eine Anzahl von geschuldeten Geldbeträgen auf. Ziel ist es die Beträge pro Person zu summieren. Dies funktioniert auch mehr oder weniger. Also

1. Spalte: Datum des Eingangs
2. Spalte: Abrechnungstyp (z.B. Bevölkerungskurs, Diverses, Termine etc.)
3. Spalte: Name der Person, die das Geld will
4. Spalte: geschuldeter Betrag pro Abrechnung
5. Spalte: Summe der Einzelbeträge pro Person

Dies wird auch so angezeigt. Leider werden die Werte in ein paar Felder kopiert, die leer sein sollten, ich weiss aber nicht wie ich das anpassen muss.

Hier ein Beispiel wie es aktuell aussieht
[Datum] [Abrechnungstyp] [Name] [Guthaben] [Total]
30.03.2016 Kleidersammlung Person 1 50.00 50
17.03.2016 Firmenkurs Person 1 130.00 130
Firmenkurs Person 1 130.00 180
27.02.2016 Bevölkerungskurs Person 2 145.00 145
Bevölkerungskurs Person 2 145.00 145
27.02.2016 Termine Person 3 84.15 84.15
26.02.2016 Kleidersammlung Person 3 05.85 5.85
25.02.2016 Bevölkerungskurs Person 3 160.00 160
Bevölkerungskurs Person 3 160.00 260
Bevölkerungskurs 160.00 585


So sollte es aussehen
[Datum] [Abrechnungstyp] [Name] [Guthaben] [Total]
30.03.2016 Kleidersammlung Person 1 50.00
17.03.2016 Firmenkurs Person 1 130.00
Total Person 1 180
27.02.2016 Bevölkerungskurs Person 2 145.00
Total Person 2 145
27.02.2016 Termine Person 3 84.15
26.02.2016 Kleidersammlung Person 3 05.85
25.02.2016 Bevölkerungskurs Person 3 160.00
Total Person 3 260
Gesamttotal 585

Natürlich wäre es auch möglich, dass das jeweilige Total in der Spalte Guthaben stehen würde, so dass es keine Total Spalte braucht.

Mit Hilfe von diversen Posts bin ich bis dahin gekommen, leider komme ich seit Stunden nicht mehr weiter. Einfache SQL Abfragen kriege ich hin, bei solch komplexen stehe ich leider an.

Kann mir jemand weiterhelfen?

Danke

Roger

Options: ReplyQuote


Subject
Views
Written By
Posted
UNION ALL mit Zwischensummen
1421
April 24, 2016 01:00PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.