Rechnen mit zwei SQL Abfragen

Sentinel997

Benutzer
Beiträge
11
Hallo Zusammen
Ich habe zwei separate SQL Abfragen erstellt wo jeweils eine Summe gebildet wird.
Sie unterscheiden sich nur im Abschnitt WHERE.

Diese beiden SQL Abfragen möchte ich nun von einander abziehen.

Kann man das innerhalb einer SQL Abfrage lösen.

Einen Ansatz habe ich einmal versucht mit einer verschachtelten Select Anweisung.
Habe aber keine Lösung erziehlen können.

Die erste Abfrage:
SELECT
SUM (JPV7VA) AS 'Eingang'
FROM tbl_rrjprep
WHERE SUBSTRING(cast(JPF2VB AS char),6,2) = 09
AND JPFICD = 01
AND JPF7NC = 2
AND JPIASU = 'F'
AND JPH5SU = 'S'

Die zweite Abfrage:
SELECT
SUM (JPV7VA) AS 'Ausgang'
FROM tbl_rrjprep
WHERE SUBSTRING(cast(JPF2VB AS char),6,2) = 09
AND JPFICD = 01
AND JPF7NC = 2
AND JPIASU = 'F'
AND JPH5SU = 'H'

Danke schon im voraus für weitere Ansätze.
 
Werbung:
Guten Morgen,
Echt jetzt; so einfach. Ich habe nicht annähernd im Netz so was gefunden.
Gibt es eigentlich eine gutes Tutorial im Netzt.
Vielen Dank für die Unterstützung.
 
Performancetipp: Da sich die beiden Abfragen sich nur um die eine Where Bedingung AND JPH5SU = 'H' / 'S' unterscheiden kann man bei Tabellen mit einer größeren Datensatz Anzahl auch
SELECT
SUM (if (JPH5SU = 'S',JPV7VA,0)) +
SUM (if (JPH5SU = 'H',JPV7VA,0)) AS 'Eingang+Ausgang'
FROM tbl_rrjprep
WHERE SUBSTRING(cast(JPF2VB AS char),6,2) = '09'
AND JPFICD = 01
AND JPF7NC = 2
AND JPIASU = 'F'
verwenden.
 
Werbung:
Echt jetzt; so einfach. Ich habe nicht annähernd im Netz so was gefunden.
Wahrscheinlich ist die Antwort von @Georg V. der (Haupt)Grund, warum Du das nicht findest.
Es wird einfach nicht so gemacht, wie Du es haben wolltest. Die Gründe für das andere normale Verfahren hat @Georg V. auch bereits genannt. Sie liegen eigentlich in der Natur der Sache.

1. Du würdest nicht ohne Not eine große Tabelle 2x abfragen, wenn 1x reicht.
2. Du stellst nach Möglichkeit keine Daten nebeneinander, um sie zu verarbeiten, sondern untereinander. Nebeneinander ist eine Strukturänderung in SQL, untereinander bleiben alle Typen identisch.

Code:
-- haben
SELECT
       SUM (betrag) betrag_h
  FROM salden
 WHERE bschluessel = 'h';

-- soll
SELECT
       SUM (-1*betrag) betrag_s
  FROM salden
 WHERE bschluessel = 's';

-- saldo with subselect
select (SELECT
               SUM (betrag) betrag_h
          FROM salden
         WHERE bschluessel = 'h')+
       (SELECT
               SUM (-1*betrag) betrag_s
          FROM salden
         WHERE bschluessel = 's') 
       as saldo;

-- saldo simply summed together (including sign twist to match question)
--                              (which is a detail question of the model)
SELECT
       SUM (iif(bschluessel='s', -1, 1)*betrag) saldo
  FROM salden;
Das letzte Statement ist identisch zu der Struktur von #4.


Angenommen, man benötigt keinen Vorzeichenwechsel, wäre es nur noch:
Code:
SELECT
       SUM (betrag) saldo
  FROM salden;

Angenommen, das Vorzeichen wäre nicht als h oder s kodiert, sondern als Zahl -1 oder +1, wäre es so:
Code:
SELECT
       SUM (bschluessel*betrag) saldo
  FROM salden;

Müsste man dennoch filtern, wie in der Anfrage, dann eben:
Code:
SELECT
       SUM (bschluessel*betrag) saldo
  FROM salden
  where <Bedingung für alle zu summierenden Records>
 
Zurück
Oben