Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Summenbildung über Query, oder doch doppelt abfragen (https://www.delphipraxis.net/186174-summenbildung-ueber-query-oder-doch-doppelt-abfragen.html)

waldforest 10. Aug 2015 16:57

Datenbank: Firebird • Version: 2.5 • Zugriff über: zeos

Summenbildung über Query, oder doch doppelt abfragen
 
Hallo,
über eine SQL-Abfrage bilde ich die Summen über VK-Preise etc. je Artikel in einem bestimmten Zeitraum. Dies bringe ich über ein GRID zur Anzeige.
Nun möchte ich im Grid-Footer die Summe über die Spalten anzeigen.
Delphi-Quellcode:
SQL.Add(     'SELECT');
             SQL.Add(     '  A.NR,');
             SQL.Add(     '  sum( OA.PREIS ) AS Sum_Umsatz,');
             SQL.Add(     '  sum( OA.EK_PREIS ) AS Sum_EK,');
             SQL.Add(     '  sum( OA.MENGE ) AS Sum_Anzahl,');
             SQL.Add(     '  ( 100 *( 1 - SUM( OA.EK_PREIS ) / IIF( SUM( OA.PREIS ) = 0 ,0.01 , SUM( OA.PREIS )))) AS EBITDA');
             SQL.Add(     ' FROM');
             SQL.Add(     ' WHERE');
             SQL.Add(     '  AND OA.VKDAT >= '+QuotedStr(FormatDateTime('DD.MM.YYYY',StartOfTheMonth(jvdtmpckr_Start.Date))));
             SQL.Add(     '  AND OA.VKDAT<= '+QuotedStr(FormatDateTime('DD.MM.YYYY',EndOfTheMonth(jvdtmpckr_Ende.Date))));
             SQL.Add(     ' GROUP BY');
             SQL.Add(     '  A.NR,');
Bisher bilde ich diese Gesamtsumme indem ich separate Abfrage wie oben ohne Gruppierung auf Artikel erstelle.
Bedeutet, dass die gesamte Abfrage mindestens 2 mal durchlaufe.
Gibt es eine Möglichkeit eine Abfrage über die erste Query zur Gesamtsummenbildung durchzufühen wenn ja wie ?

Wie kann ich die Abfrage, dieses Vorgehen optimieren ?

mkinzler 10. Aug 2015 17:12

AW: Summenbildung über Query
 
Z.B. mit einer SP

nahpets 10. Aug 2015 17:53

AW: Summenbildung über Query, oder doch doppelt abfragen
 
Hallo,

wenn Du die Daten in einem "Rutsch" ausgibst, könnte das so funktionieren:
Code:
SQL.Add( 'SELECT');
             SQL.Add( ' A.NR,');
             SQL.Add( ' sum( OA.PREIS ) AS Sum_Umsatz,');
             SQL.Add( ' sum( OA.EK_PREIS ) AS Sum_EK,');
             SQL.Add( ' sum( OA.MENGE ) AS Sum_Anzahl,');
             SQL.Add( ' ( 100 *( 1 - SUM( OA.EK_PREIS ) / IIF( SUM( OA.PREIS ) = 0 ,0.01 , SUM( OA.PREIS )))) AS EBITDA');
             SQL.Add( ' FROM');
             SQL.Add( ' WHERE');
             SQL.Add( ' AND OA.VKDAT >= '+QuotedStr(FormatDateTime('DD.MM.YYYY',StartOfTheMonth(jvdtmpckr_Start.Date))));
             SQL.Add( ' AND OA.VKDAT<= '+QuotedStr(FormatDateTime('DD.MM.YYYY',EndOfTheMonth(jvdtmpckr_Ende.Date))));
             SQL.Add( ' GROUP BY');
             SQL.Add( ' A.NR,');
SQL.Add( 'union all'); // hierdurch werden die Ergebnisse mehrerer Abfragen unsortiert hintereinander ausgegeben.
SQL.Add( 'SELECT');
             SQL.Add( ' A.NR,');
             SQL.Add( ' sum( OA.PREIS ) AS Sum_Umsatz,');
             SQL.Add( ' sum( OA.EK_PREIS ) AS Sum_EK,');
             SQL.Add( ' sum( OA.MENGE ) AS Sum_Anzahl,');
             SQL.Add( ' ( 100 *( 1 - SUM( OA.EK_PREIS ) / IIF( SUM( OA.PREIS ) = 0 ,0.01 , SUM( OA.PREIS )))) AS EBITDA');
             SQL.Add( ' FROM');
             SQL.Add( ' WHERE');
             SQL.Add( ' AND OA.VKDAT >= '+QuotedStr(FormatDateTime('DD.MM.YYYY',StartOfTheMonth(jvdtmpckr_Start.Date))));
             SQL.Add( ' AND OA.VKDAT<= '+QuotedStr(FormatDateTime('DD.MM.YYYY',EndOfTheMonth(jvdtmpckr_Ende.Date))));
Zumindest unter Oracle gehts so, ob Firebird das unterstützt, weiß ich nicht.

jaenicke 10. Aug 2015 18:00

AW: Summenbildung über Query, oder doch doppelt abfragen
 
Ich benutze dafür mit FireDAC (ab XE5 Enterprise bei Delphi dabei) immer eine TFDMemTable und mache darüber dann im Speicher Abfragen mit LocalSQL. So ist gewährleistet, dass ich die Summen usw. über die gleichen Daten bilde, kann aber bequem mit SQL Formeln (und Livebinding usw.) arbeiten.

Geht das mit ZEOS vielleicht auch?

Sir Rufo 10. Aug 2015 19:34

AW: Summenbildung über Query, oder doch doppelt abfragen
 
Oder mal diesen Artikel lesen
http://edn.embarcadero.com/article/29272

Stevie 10. Aug 2015 19:44

AW: Summenbildung über Query, oder doch doppelt abfragen
 
Einfach ne vernünftige Grid Komponente nutzen, die sowas kann :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 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