Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL : SUM Funktion mit Bedingungen für Felder (https://www.delphipraxis.net/180963-sql-sum-funktion-mit-bedingungen-fuer-felder.html)

Cronen 3. Jul 2014 15:37

Datenbank: ADS • Version: 11 • Zugriff über: local

SQL : SUM Funktion mit Bedingungen für Felder
 
Ich finde für ein SQL-Problem nicht den richtigen Ansatz. Als "SQL Legastheniker"
sind meine Suchen gescheitert (wahrscheinlich finde ich nur wieder nicht die
richtige Suchbegriffe ! :oops:)

Also das Problem:

Ich hab eine Tabelle mit den Spalten
[Rechnungsbetrag] [Anteil_A] [RechDatumTeilA] [Bezahlt_A] [Anteil_B] [RechDatumTeilB] [Bezahlt_B]

Ich möchte jetzt eine Auswertung der Tabelle mit der
1 Gesamtsumme
2 Summe Anteil A
3 Summe Bezahlt A
4 Summe Anteil B
5 Summe Bezahlt B
6 Summe RechnungTeilA und TeilB gestellt
7 Summe noch nicht in Rechnung gestellter Posten A + B

Felder 1 bis 5 sind kein Problem; nur 6 und 7 in der gleichen Abfrage krieg ich nicht hin
(seperat schon). In SQL sieht das für mich dann so aus:

Code:
SELECT
 SUM(Betrag) AS SummeGesamt,
 SUM(Anteil_A) AS SummeAnteilA,
 SUM(Bezahlt_A) AS SummeBezA,
 SUM(Anteil_B) AS SummeAnteilB,
 SUM(Bezahlt_B) AS SummeBezB,
 /* und jetzt haperts: */
 SUM(Anteil_A) "wenn RechDatum A = NULL" AS Ohne_Rechnungen + SUM(Anteil_B) "wenn RechDatum B = NULL" AS Ohne_Rechnungen,
 SUM(Anteil_A)"wenn RechDatum A <> NULL" AS Offene_Rechnungen + SUM(Anteil_B) "wenn RechDatum B <> NULL" AS Offene_Rechnungen
FROM
 Rechnungen;
Wie krieg ich die hier frei formulierten Bedingungen - also eine WHERE -Klausel nur für die einzelnen
Felder - in SQL hin? Kann mir jemand helfen ?

Neutral General 3. Jul 2014 15:43

AW: SQL : SUM Funktion mit Bedingungen für Felder
 
Ich verstehe ehrlich gesagt nicht mal deinen Pseudocode im SQL aber prinzipiell geht "iif" wenns das bei ADS gibt:

Code:
sum(iif(feld2 = 3, feld1, 0)) as summe
Summiert die werte für Feld für alle Datenzeilen wo Feld2 = 3 ist.

DeddyH 3. Jul 2014 15:47

AW: SQL : SUM Funktion mit Bedingungen für Felder
 
Falls es IIF nicht gibt, gibt es dann wenigstens CASE?
SQL-Code:
SELECT
  SUM(CASE WHEN Feld1 IS NULL THEN 0 ELSE Feld2 END)
FROM
  Tabelle

Uwe Raabe 3. Jul 2014 15:54

AW: SQL : SUM Funktion mit Bedingungen für Felder
 
Das Stichwort heißt SubSelects.

Delphi-Quellcode:
SELECT
 SUM(Betrag) AS SummeGesamt,
 SUM(Anteil_A) AS SummeAnteilA,
 SUM(Bezahlt_A) AS SummeBezA,
 SUM(Anteil_B) AS SummeAnteilB,
 SUM(Bezahlt_B) AS SummeBezB,
 /* ungetestet */ 
 (SELECT SUM(Anteil_A) WHERE RechDatumTeilA IS NULL) + (SELECT SUM(Anteil_B) WHERE RechDatumTeilB IS NULL) AS Ohne_Rechnungen,
 (SELECT SUM(Anteil_A) WHERE not RechDatumTeilA IS NULL) + (SELECT SUM(Anteil_B) WHERE not RechDatumTeilB IS NULL) AS Offene_Rechnungen
FROM
 Rechnungen;
Ich weiß allerdings nicht ob ADS damit klar kommt.

p80286 3. Jul 2014 16:03

AW: SQL : SUM Funktion mit Bedingungen für Felder
 
Da auch ich mit dem Pseudocode meine Probleme habe..
wie wäre es mit einem
Code:
Union
Code:
SELECT
  SUM(Betrag) AS SummeGesamt,
  SUM(Anteil_A) AS SummeAnteilA,
  SUM(Bezahlt_A) AS SummeBezA,
  SUM(Anteil_B) AS SummeAnteilB,
  SUM(Bezahlt_B) AS SummeBezB,
  0 AS Ohne_Rechnungen,
  0 as Offene_Rechnungen
FROM Rechnungen
Union
select
  0,
  0,
  0,
  0,
  0,
  SUM(Anteil_A) "wenn RechDatum A = NULL" AS Ohne_Rechnungen + SUM(Anteil_B) "wenn RechDatum B = NULL" AS Ohne_Rechnungen,
  SUM(Anteil_A)"wenn RechDatum A <> NULL" AS Offene_Rechnungen + SUM(Anteil_B) "wenn RechDatum B <> NULL" AS Offene_Rechnungen
 FROM
  Rechnungen;
ggf. das Ergebnis dann nochmal mit einen Group summieren

Gruß
K-H

Cronen 3. Jul 2014 16:19

AW: SQL : SUM Funktion mit Bedingungen für Felder
 
Jawohl das sind Lösungen:

@ Neutral General und DeddyH:

- IIF funktioniert

@Uwe Raabe:

Genau das war das fehlende Stichwort:
Mit SubSelect habe ich auch sofort brauchbare Lösungen gefunden

Danke an alle !


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz