Mehrere Abfragen durch zusätzliche Spalten verbinden

Orangensaft

Benutzer
Beiträge
5
Hallo werte Community,
vorweg, ich bin ein SQL Neuling, allerdings mit anderen Programmiersprachen mehr oder weniger vertraut.

Problemstellung: Es soll eine Liste an Personen ausgegeben werden, welche eine bestimmte Bedingung erfüllen. Zusätzlich besitzen diese Personen Buchungen, welche in verschiedenen Jahren getätigt wurden. Nun will ich von diesen Personen die Daten sowie die Buchungen im Jahr 2013, 2014, 2015, 2016, jeweils in einer eigenen Spalte ausgeben. Es sollte alles mehr oder weniger eine Abfrage sein, damit im Anschluss schnell und einfach ein Bericht (JasperReport) erstellt werden kann.

Im Moment habe ich das ganze über zwei einzelne Abfragen gelöst. Nun hätte ich gerne das die Spalte Betrag1Jahr oben neben dem Gesamtbetrag angezeigt wird. Dabei will ich keine Doppelten Einträge (Ansatz mit UNION lieferte mir Namen doppelt), aber trotzdem ein Eintrag auch wenn vielleicht in einem Jahr keine Buchung vorhanden war.
upload_2016-10-3_17-0-41.png

Ich hoffe man versteht mein Problem :-) Ansonsten gebe ich gerne weitere Erläuterungen!

Anbei noch die zwei Abfragen wie Sie im Moment verwendet werden

Code:
SELECT person_nr AS PersonenNummer,
CONCAT (name, name2 ) AS Name,
SUM(buchung.betrag_ein - buchung.betrag_aus) AS Gesamtbetrag
FROM buchung
INNER JOIN person ON buchung.person_id = person.id
WHERE
sperr_grund_id IN ('21', '22', '23', '17', '10', '2')
GROUP BY person_nr, CONCAT (name, name2 )


SELECT person_nr AS PersonenNummer,
CONCAT (name, name2 ) AS Name,
SUM(buchung.betrag_ein - buchung.betrag_aus) AS Betrag1Jahr
FROM buchung
INNER JOIN person ON buchung.person_id = person.id
WHERE sperr_grund_id IN ('21', '22', '23', '17', '10', '2') AND
(YEAR(CAST(buchungs_datum AS DATE)) = 2015 OR YEAR(CAST(buchungs_datum AS DATE)) = 2016)
GROUP BY person_nr, CONCAT (name, name2 )

Herzlichen Dank,
Orangensaft
 
Werbung:
soweit ich das sehe könntest Du das via sum(case when ... then ... else 0 end) regeln. Passend erweitern ;-)

Deine Datentypen scheinen für den Eimer zu sein, wenn Du im WHERE so schlimm rumCASTen mußt. Die Performance dürfte daher schnell unterirdisch sein.
 
Ausgezeichnet!

Genau sowas habe ich gesucht, vielen Dank.

Performance ist nicht relevant, die Abfrage wird vlt. 1 mal im Monat ausgeführt und auch dann ist die Geschwindigkeit relativ egal :)
 
Werbung:
Zurück
Oben