UNION ALL mit Zwischensummen
Posted by: Roger Elsig
Date: April 24, 2016 01:00PM
Date: April 24, 2016 01:00PM
Hallo zusammen
Ich kämpfe mit folgendem SQL Statement
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
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
Subject
Views
Written By
Posted
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.