Abfrage aus 3 Tabellen

fungolfer

Neuer Benutzer
Beiträge
2
Guten morgen allerseits. Ich habe da ein Problem. Ich muss aus 3 Tabellen ermitteln, welche Beträge am Jahresende zu erstatten sind. Dabei habe ich eine Gesamttabelle, eine Monatstabelle für aktuelle Zahlen und noch eine Tabelle in der bereits erstattete Beträge enthalten sind, bzw. Beträge, die nicht erstattet werden sollen. Tabelen 1 und 2 habe ich mit einem Union All bereits verbunden und auch das richtige Ergebnis bekommen. Es will mir allerdings nicht gelingen, die bereits erstatteten, bzw. nicht zu erstattenden Beträge einzufügen. Hier mal meine biusherige Abfrage:
select
substr. (Unterabteilung, 1, 2) as Abteilung,
count (*) as Anzahl,
sum (Erstattung) as Betrag
from gesamt
where B_art = 2
and Auszdat between '20141231' and '20150101'
group by substr. (Unterabteilung, 1, 2)
UNION ALL
select
substr. (Unterabteilung, 1, 2) as Abteilung,
count (*) as Anzahl,
sum (Erstattung) as Betrag
from monat
where B_art = 2
and Auszdat between '20141231' and '20150101'
group by substr. (Unterabteilung, 1, 2)

Soweit klappt alles, aber wie bekomme ich jetzt die Beträge raus, die nicht erstattet werden können / sollen?
Die Abfrage über diese Beträge lautet:
Select * from Tabelle c where B_art = 3 and auszahlung = 1 and to_date (auszdat, 'DDMMYYY') between to_date ('31122014', DDMMYYYY) and to_date ('01012015', DDMMYYYY)
Versucht habe ich bisher diese Abfrage in die jewelige Where Klausel einzufügen, allerdings erhalte ich dann völlig andere Beträge als veranschlagt, nämlich wesentlich höhere Beträge. Sollte aber weniger sein.
Ich bin mir nicht sicher, ob mir ein Join hilft, da ich bei einem Join nicht sicher bin, ob dann nicht das selbe Resultat herauskommt. Zusätzlich dazu wüsste ich auch gar nicht, wie ich dann den Join aufstellen soll, dass er eben diese Beträge herausrechnet, statt diese hinzuzufügen. Hat jemand eine erhellende Idee? Muss vielleicht erwähnen, dass ich hier ins kalte Wasser geworfen wurde und von SQL keinen Schimmer habe. Das obige Ergebnis habe ich dank Recherchen im Internet hinbekommen, aber ich finde nix zu Berechnungen und einer zusätzlichen Tabelle, deren Ergebnis eben nicht hinzu-, sondern abgerechnet werden soll.
Für jede Hilfe bin ich äußerst dankbar :)
 
Werbung:
Du suchst im Wesentlichen das hier:
Code:
SELECT    t.Abteilung,
        sum(t.Betrag) AS Betrag
FROM    (

SELECT    Abteilung,
        Betrag
FROM    Tabelle1
UNION ALL
SELECT    Abteilung,
        Betrag
FROM    Tabelle2
UNION ALL
SELECT    Abteilung,
        Erstattung * -1 AS Betrag
FROM    Tabelle3

) t
GROUP BY t.Abteilung
Die einzelnen Abfragen auf die Tabellen müssen natürlich passen und die selben Spalten liefern um per UNION verbunden werden zu können. Welche WHERE Bedingungen du dort noch einbaust spielt dann aber keine Rolle. Diese Tabelle dient dann als Grundlage für ein GROUP BY mit sum().
 
Werbung:
ok, den muss ich erstmal sacken lassen :D Auf jeden Fall schon einmal vielen Dank für den Ansatz. Dann werde ich mal mein Glück versuchen :)
 
Zurück
Oben