Auf Thema antworten

Wahrscheinlich ist die Antwort von [USER=5104]@Georg V.[/USER] 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 [USER=5104]@Georg V.[/USER] 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;

[/code]

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;

[/code]


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;

[/code]


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>

[/code]


Zurück
Oben