![]() |
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:
Bisher bilde ich diese Gesamtsumme indem ich separate Abfrage wie oben ohne Gruppierung auf Artikel erstelle.
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,'); 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 ? |
AW: Summenbildung über Query
Z.B. mit einer SP
|
AW: Summenbildung über Query, oder doch doppelt abfragen
Hallo,
wenn Du die Daten in einem "Rutsch" ausgibst, könnte das so funktionieren:
Code:
Zumindest unter Oracle gehts so, ob Firebird das unterstützt, weiß ich nicht.
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)))); |
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? |
AW: Summenbildung über Query, oder doch doppelt abfragen
|
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 10:34 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