![]() |
Datenbank: SQL-Server 2000 • Zugriff über: BDE
Aggreagt Funktion
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. |
Re: Aggreagt Funktion
SQL-Code:
sollte eigentlich funktionieren
select artikel,sum(preis) as gespreis
from tabelle group by artikel, order by artikel |
Re: Aggreagt Funktion
SQL-Code:
select artikel, sum(preis) AS TotalPreis
from tabelle group by artikel UNION ALL select 'Summe / Total' AS artikel, sum(preis) AS TotalPreis from tabelle |
Re: Aggreagt Funktion
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.
|
Re: Aggreagt Funktion
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.
|
Re: Aggreagt Funktion
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:
Mit SQL geht's aber schneller.
gespreis := 0.0;
query1.first; while not query1.eof do begin gespreis := gespreis + Query1.FieldByName('gespreis').AsFloat; query1.Next; end; |
Re: Aggreagt Funktion
Zitat:
|
Re: Aggreagt Funktion
Danke, passt jetzt!
jangbu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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