AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

select sum mit feldausgabe

Ein Thema von HPB · begonnen am 27. Jul 2016 · letzter Beitrag vom 28. Jul 2016
Antwort Antwort
Seite 1 von 2  1 2      
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

select sum mit feldausgabe

  Alt 27. Jul 2016, 16:03
Datenbank: interbase • Version: xe3 • Zugriff über: ib
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:
Select sum(Zahlung) as Einzahlungen, sum(Zahlung) as Ausgabe
from Kassenbuch where extract(year from datum) in (:JahrVon, :pJahrBis)
bildet ja nur die Summen ohne Bedingungen.

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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 16:17
Servus,
die Formulierung Select sum(Zahlung) as Einzahlungen, sum(Zahlung) as Ausgabe bringt Dir zweimal dieselbe Summe mit unterschiedlichen Feldnamen. Willst Du das?
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#3

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 16:20
Pssst, der Parameter von SUM hießt in vielen Dokumentationen der meisten DBMS nicht umsonst Value oder Expression und nicht Field.
http://stackoverflow.com/questions/1...ions-with-case
http://docwiki.embarcadero.com/InterBase/XE7/en/SUM(_) ... schau mal was bei <val> (Value) geschrieben steht.

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:
sum(iif(Zahlung < 0, Zahlung, 0))
sum(iif(Zahlung < 0, Zahlung, NULL))
Die meisten Aggregate-Funktionen werten nur aus, wenn ein Wert ungleich 0 vorkommt,
z.B. count(*) zählt alle Zeilen und count(abc) zählz nur Datensätze, wo abc NOT NULL ist.

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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jul 2016 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 16:46
SQL-Code:
select sum(zahlung),Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr
where Kontoart='E'
Group by Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr
wird dir die Summe aller Zahlungen aus Datensätzen mit gleichem Datum, KontoNr, KontoName, Zahlung, Kontoart und AuszugsNr liefern.

willst Du nur eine summe der Zahlungen egal welches Datum, KontoNr, KontoName, Zahlung, KontoArt, AuszugsNr dann nutzt Du

SQL-Code:
select sum(zahlung)
where Kontoart='E'
Willst Du die Summe aller Zahlungen eines Tages und eines Kontos dann nutze
SQL-Code:
select sum(zahlung),Datum, KontoNr
where Kontoart='E'
  and Datum=Mydate
  and KontoNr=MyAccountNo
Group by Datum, KontoNr

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#5

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 17:39
Summe alle Einzahlungen mit KontoArt = 'E'
Summe aller Ausgaben mit KontoArt = 'A'
Danach die Felder (Datum, KontoNr, KontoName, Zahlung, AuszugsNr)
Er will zwei Summen gleichzeitig, die zwar aus dem selben Feld, aber nur je von einem Bruchteil der Datensätze kommt.

So oder so, in "SUM" mußß die Bedingung rein.
Sei es durch Steuern der Aggregate-Funktion SUM oder durch zwei SubSelects.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 17:46
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#7

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 17:52
zwischenzeitlich habe ich folgendes gefunden: http://www.delphipraxis.net/180963-s...er-felder.html
Das schein das Richtige zu sein (von Uwe Rabe).
Aber die Bedingungen:
Delphi-Quellcode:
 (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
will nicht gelingen bzw. kann ich nicht umsetzen.
Delphi-Quellcode:
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)
Bekomme beim Testen die Fehlermeldung: "Token unknow - line 4, column 23 - Where"
Der obige Code scheint zu funktionieren. Warum ich beim unteren Code
eine Fehlermeldung bekomme kann ich nicht nachvollziehen.
Mit Gruß HPB
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#8

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 17:52
Billiges Beispiel mit wenigen Daten, über "eine" Gruppe.
SQL-Code:
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
Noch paar Spalten mehr in die Quelle, in die Ausgabe und ein GroupBy über die zusätzlichen Spalten.

Es gibt auch ein paar DBMS, die können in etwa sowas wie sum(c WHERE x = 'a') bzw. sum(c ON x = 'a') , oder irgendwie so.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jul 2016 um 18:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 17:57
Was ist für den Anfang mit

SQL-Code:
SELECT SUM(Zahlung), KontoArt
WHERE (KontoArt = 'E') or (KontoArt = 'A')
GROUP BY KontoArt
Das sollte doch schon mal die beiden Summen ergeben.

Bleibt immer noch unklar, was mit den übrigen Feldern gemeint ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#10

AW: select sum mit feldausgabe

  Alt 27. Jul 2016, 18:07

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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jul 2016 um 18:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 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