2 SQL Abfragen verknüpfen mit Summe und Vergleich

CR-CR

Benutzer
Beiträge
5
Hallo,

ich stehe seit einigen Tagen vor einer riesigen Herausforderung (zumindest für mich) und versuche verzweifelt, sie zu lösen.

Und zwar geht es um folgendes Konzept:

Ich habe zwei Datenbanktabellen und möchte die Ergebnisse von den beiden Tabellen in einer zusammenführe und 2 extra Funktionen einbauen.

Ich habe bisher leider nur beide Tabellen erstellen können, ich weiß weder, wie man sie verbindet, noch wie man sie das machen lässt, was sie sollen.

Der Aufbau soll in etwa so aussehen:

Kundennummer (in Tabelle ff.RechAusg)
Rechnungsnummer (in Tabelle ff_RechAusg und ff_Zahlung_ein)
Brutto (Rechnungswert) (in Tabelle ff.RechAusg)
Gezahlt (Gezahlter Betrag) (in Tabelle ff_Zahlung_ein)
--------
jetzt soll die Differenz ausgerechnet werden
Brutto abzüglich Gezahlt (Tabelle ff_RechAusg und ff_Zahlung_ein)
--------
dann soll eine 0 in einer neuen Spalte angezeigt werden, wenn beide Ergebnisse gleich sind (Brutto und Gezahlt) sonst soll eine 1 angezeigt werden.

Zu beachten ist, dass alle Rechnungsnummern aus Tabelle ff.RechAusg auf jeden Fall angezeigt werden müssen.

Da eine Rechnung mehrere Positionen enthält, muss distinct verwendet werden.


Hier sind die Befehle zum Abrufen der beiden Tabellen:
Tabelle 1
SELECT DISTINCT
RG_NR
, WERT_BRUTTO
FROM [DATENBANK].[dbo].[ff_RechAusg]
where RG_NR > 460000

Tabelle 2
SELECT
RECHNUNGSNR as RG_NR,
SUM(BETRAG) as GEZAHLT
FROM [DATENBANK].[dbo].[ff_Zahlung_ein]
where RECHNUNGSNR > 460000
group by RECHNUNGSNR


Vielen Dank für jede Hilfe!
 
Werbung:
Steht da wirklich der gesamt-Brutto-Wert mehrfach in der Tabelle oder ist WERT_BRUTTO jeweils auf die Rechnungsposition bezogen und muss aufaddiert werden?
 
Das ist schonmal schlechtes Design und muss in deiner jetzigen Abfrage mit Aufwand korrigiert werden. DISTINCT kann man dazu nutzen, wenn natürlich mal fehlerhafte Brutto-Werte eingetragen werden passt es nicht mehr.

Hier mit DISTINCT:
Code:
SELECT    Rechnungen.RG_NR,
        Rechnungen.WERT_BRUTTO,
        sum(BETRAG) AS GEZAHLT,
        Rechnungen.WERT_BRUTTO - isnull(sum(BETRAG),0) AS differenz,
        ( CASE WHEN Rechnungen.WERT_BRUTTO - isnull(sum(BETRAG),0) = 0 THEN 0 ELSE 1 END ) AS gezahlt_flag
FROM    (

SELECT    DISTINCT
        RG_NR,
        WERT_BRUTTO
FROM    [DATENBANK].[dbo].[ff_RechAusg]

        ) Rechnungen
LEFT JOIN [DATENBANK].[dbo].[ff_Zahlung_ein] Zahlungen
ON        Rechnungen.RG_NR = Zahlungen.RECHNUNGSNR
WHERE    Rechnungen.RG_NR > 460000
GROUP BY Rechnungen.RG_NR,Rechnungen.WERT_BRUTTO
 
Danke ukulele, das funktioniert soweit, jedoch wirft er mir, wenn die Differenz 0 ist, beispielsweise diesen Wert aus:
Brutto Gezahlt Differenz
2377,99 2377,99 4,54747350886464E-13 1

Hast du eine Idee, warum?

Und leider zeit er bei Sachen, die beispielsweise überzahlt wurden auch eine 1 an - dort soll er, wenn möglich, auch eine 0 anzeigen, so, als wäre es offen.
 
Zuletzt bearbeitet:
Welches Format haben denn die Spalten WERT_BRUTTO und BETRAG? Ich vermute mal du hast hier mehr Nachkommastellen als du siehst, anders kann ich das nicht erklären.
 
Zu dem Format kann ich leider auch nichts sagen, aber kann man es so machen, dass der Wert 0 ausgeworfen wird, wenn beide Zahlen gleich sind?

Vielen Dank nochmal für die Hilfe!
 
Werbung:
1 - 1 sollte 0 ergeben, das ist ja Sinn der Spalte. Wenn da natürlich eine Differenz raus kommt geht es nicht auf 0 es sei denn, man rundet vieleicht noch oder sagt CASE WHEN Rechnungen.WERT_BRUTTO - isnull(sum(BETRAG),0) BETWEEN -1 AND 1 THEN 0 ELSE ... so das kleinere Differenzen nicht berücksichtigt werden. Das ist jetzt aber Mathe, das solltest du hin kriegen.
 
Zurück
Oben