AGB  ·  Datenschutz  ·  Impressum  







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

Aggreagt Funktion

Ein Thema von jangbu · begonnen am 23. Mär 2009 · letzter Beitrag vom 23. Mär 2009
Antwort Antwort
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#1

Aggreagt Funktion

  Alt 23. Mär 2009, 16:06
Datenbank: SQL-Server 2000 • Zugriff über: BDE
Hallo,
habe ein Selektionsproblem.

Bekomme mit folgender Abfrage über die Aggregatfunktion die Artikel sortiert mit ihren Preis-Summen

select artikel,sum(preis)
from tabelle
group by artikel, order by artikel

Wenn ich aber den Gesamt-Preis über die gesamte Abfrage (würde ich normalereise mit Query.on-calc addieren) geht hier aber nicht da ich persistente Felder nicht mit aggregatfunktionen mischen kann, will sagen ich müsste im on-calc Ereignis Query1.FieldByName('Preis') abfragen, Preis ist aber in keiner Aggregatfunktion vorhanden also geht das nicht. Habe keine Idee wie ich, gleichzeitig in dieser Abfrage auch den GesamtPreis ermitteln kann?

jangbu.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:12
SQL-Code:
select artikel,sum(preis) as gespreis
from tabelle
group by artikel, order by artikel
sollte eigentlich funktionieren
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:13
SQL-Code:
select artikel, sum(preis) AS TotalPreis
from tabelle
group by artikel
UNION ALL
select 'Summe / TotalAS artikel, sum(preis) AS TotalPreis
from tabelle
Andreas
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:40
Sorry, hab mich wahrscheinlich falsch ausgedrückt. 'Meine Abfrage' bringt das gleiche Ergebnis, wie die beiden geposteten! Das Problem liegt weniger in der SQL-Abfrage als in der weiteren Verarbeitung in Delphi. Ich bekomme natürlich zu jedem Artikel in der Preis-Spalte (sum(preis)) den richtigen Wert. Da sum(preis) aber kein "Datenbankfeld" ist kann ich darüber auch keine Gesamtsumme[b] ermitteln.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:48
Wieso willst Du das mit Delphi machen, wenn das per SQL genauso geht? Außerdem ist es doch vollkommen wurscht, ob es sich um ein persistentes oder ein berechnetes Feld handelt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:51
Du kannst in einem berechneten Feld keine Gesamtsumme über alle Datensätze bilden!!!
Grund: du kannst nicht kontrollieren wie oft OnCalcRecord aufgerufen wird.
Das Event kann für einen Datensatz durchaus mehrfach abgefeuert werden. (Sobald ein DBGrid angeschlossen ist)

Mit berechneten Felder kann man sich nur innerhalb eines Datensatzes austoben.
Jegliche Berechnungen, die über einen Datensatz hinausgehen, können prinzipiell nicht funktionieren.
Du kannst natürlich über alle Datensätze gehen und aufaddieren:
Delphi-Quellcode:
gespreis := 0.0;
query1.first;
while not query1.eof do
begin
  gespreis := gespreis + Query1.FieldByName('gespreis').AsFloat;
  query1.Next;
end;
Mit SQL geht's aber schneller.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:54
Zitat von shmia:
Du kannst natürlich über alle Datensätze gehen und aufaddieren:
Delphi-Quellcode:
gespreis := 0.0;
query1.first;
while not query1.eof do
begin
  gespreis := gespreis + Query1.FieldByName('gespreis').AsFloat;
  query1.Next;
end;
Mit SQL geht's aber schneller.
Darauf wollte ich hinaus (wie wollt Ihr die Gesamtsumme denn sonst bilden, hab ich da was verpasst?).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jangbu

Registriert seit: 6. Apr 2006
171 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Aggreagt Funktion

  Alt 23. Mär 2009, 16:56
Danke, passt jetzt!

jangbu
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:26 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