![]() |
Datenbank: interbase • Version: xe3 • Zugriff über: ib
select sum mit feldausgabe
Guten Tag Delphianer,
zu dem folgenden Problem finde ich die Lösung nicht. Ich habe eine Tabelle "Kassenbuch" mit den folgenden Feldern: Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr Ich möchte nun folgende Auswertung starten. Summe alle Einzahlungen mit KontoArt = 'E' Summe aller Ausgaben mit KontoArt = 'A' Danach die Felder (Datum, KontoNr, KontoName, Zahlung, AuszugsNr) Die normale Summenbildung mit:
Delphi-Quellcode:
bildet ja nur die Summen ohne Bedingungen.
Select sum(Zahlung) as Einzahlungen, sum(Zahlung) as Ausgabe
from Kassenbuch where extract(year from datum) in (:JahrVon, :pJahrBis) Wie muss ich die "Where-Klausel" gestalten, damit die Summenwerte und auch noch die Felder der Tabelle ausgegeben werden. Geht dies überhaupt? Ich hoffe die Darlegung ist nachvollziebar. Mit Gruß HPB |
AW: select sum mit feldausgabe
Servus,
die Formulierung
Delphi-Quellcode:
bringt Dir zweimal dieselbe Summe mit unterschiedlichen Feldnamen. Willst Du das?
Select sum(Zahlung) as Einzahlungen, sum(Zahlung) as Ausgabe
|
AW: select sum mit feldausgabe
Pssst, der Parameter von SUM hießt in vielen Dokumentationen der meisten DBMS nicht umsonst Value oder Expression und nicht Field. :zwinker:
![]() ![]() Man kann bei diesen Aggregate-Funktionen auch sagen was gemacht werden soll. Selbst ORDER BY, DISTINCT und Co. kann da verwendet werden, eventuell auch ein WHERE, je nach DBMS.
SQL-Code:
Die meisten Aggregate-Funktionen werten nur aus, wenn ein Wert ungleich 0 vorkommt,
sum(iif(Zahlung < 0, Zahlung, 0))
sum(iif(Zahlung < 0, Zahlung, NULL)) z.B.
Delphi-Quellcode:
zählt alle Zeilen und
count(*)
Delphi-Quellcode:
zählz nur Datensätze, wo
count(abc)
Delphi-Quellcode:
ist.
abc NOT NULL
SQL-Code:
Select sum(IfThenDeinesDBMS(Zahlung > 0, Zahlung, 0)) as Einzahlungen,
sum(IfThenDeinesDBMS(Zahlung < 0, Zahlung, 0)) as Ausgabe -- oder halt Select sum(IfThenDeinesDBMS(KontoArt = 'E', Zahlung, 0)) as Einzahlungen, sum(IfThenDeinesDBMS(KontoArt = 'A', Zahlung, 0)) as Ausgabe |
AW: select sum mit feldausgabe
SQL-Code:
wird dir die Summe aller Zahlungen aus Datensätzen mit gleichem Datum, KontoNr, KontoName, Zahlung, Kontoart und AuszugsNr liefern.
select sum(zahlung),Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr
where Kontoart='E' Group by Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr willst Du nur eine summe der Zahlungen egal welches Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr dann nutzt Du
SQL-Code:
Willst Du die Summe aller Zahlungen eines Tages und eines Kontos dann nutze
select sum(zahlung)
where Kontoart='E'
SQL-Code:
select sum(zahlung),Datum, KontoNr
where Kontoart='E' and Datum=Mydate and KontoNr=MyAccountNo Group by Datum, KontoNr Gruß K-H |
AW: select sum mit feldausgabe
Zitat:
So oder so, in "SUM" mußß die Bedingung rein. Sei es durch Steuern der Aggregate-Funktion SUM oder durch zwei SubSelects. |
AW: select sum mit feldausgabe
Die beiden Summen bekommt man einfach mit einem Group by - das gibt dann bei passendem Where zwei Datensätze. Bei den restlichen Feldern verstehe ich noch nicht, was da drin stehen soll. Es gibt ja mehrere Datensätze, die zu diesen Summen zusammengefasst werden.
|
AW: select sum mit feldausgabe
zwischenzeitlich habe ich folgendes gefunden:
![]() Das schein das Richtige zu sein (von Uwe Rabe). Aber die Bedingungen:
Delphi-Quellcode:
will nicht gelingen bzw. kann ich nicht umsetzen.
(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
Delphi-Quellcode:
Bekomme beim Testen die Fehlermeldung: "Token unknow - line 4, column 23 - Where"
select
sum(Zahlung) as Einnahme, sum(Zahlung) as Ausgabe, (select SUM(Einnahme) where KontoArt = 'E') as Ges_Einnahmen, (select SUM(Ausgabe= where KontoArt = 'A') as Ges_Ausgabe from KASSENBUCH where extract(year from datum) in (2016, 2016) Der obige Code scheint zu funktionieren. Warum ich beim unteren Code eine Fehlermeldung bekomme kann ich nicht nachvollziehen. Mit Gruß HPB |
AW: select sum mit feldausgabe
Billiges Beispiel mit wenigen Daten, über "eine" Gruppe.
SQL-Code:
Noch paar Spalten mehr in die Quelle, in die Ausgabe und ein GroupBy über die zusätzlichen Spalten.
SELECT sum(c) AS sum_all, sum(iif(x = 'a', c, 0)) AS sum_a, sum(iif(x = 'b', c, 0)) AS sum_b,
count(*) AS count_all, count(nullif(x = 'a', false)) AS count_a, count(nullif(x = 'b', false)) AS count_b FROM (VALUES ('a', 1), ('b', 2), ('a', 4), ('a', 8), ('b', 16)) AS temp (x, c) -- sum_all,sum_a,sum_b,count_all,count_a,count_b = 31,13,18,5,3,2 Es gibt auch ein paar DBMS, die können in etwa sowas wie
Delphi-Quellcode:
bzw.
sum(c WHERE x = 'a')
Delphi-Quellcode:
, oder irgendwie so.
sum(c ON x = 'a')
|
AW: select sum mit feldausgabe
Was ist für den Anfang mit
SQL-Code:
Das sollte doch schon mal die beiden Summen ergeben.
SELECT SUM(Zahlung), KontoArt
WHERE (KontoArt = 'E') or (KontoArt = 'A') GROUP BY KontoArt Bleibt immer noch unklar, was mit den übrigen Feldern gemeint ist. |
AW: select sum mit feldausgabe
:roll:
SQL-Code:
select Kunde,
sum(Zahlung) as Umsatz, -- alles zusammen, für jeden Kunden sum(iif(KontoArt = 'E', Zahlung, 0)) as Eingang, -- nur Einzahlungen des Kunden sum(iif(KontoArt = 'A', Zahlung, 0)) as Ausgang -- nur Auszahlungen des Kunden from KASSENBUCH where extract(year from datum) in (2016, 2017) group by Kunde select Kunde, extract(year from datum) as Jahr -- pro Kunde und Jahr sum(Zahlung) as Umsatz, -- alles zusammen, für jeden Kunden sum(iif(KontoArt = 'E', Zahlung, 0)) as Eingang, -- nur Einzahlungen des Kunden sum(iif(KontoArt = 'A', Zahlung, 0)) as Ausgang -- nur Auszahlungen des Kunden from KASSENBUCH where extract(year from datum) in (2016, 2017) group by Kunde, Jahr |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz