AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Summenbildung über Query, oder doch doppelt abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Summenbildung über Query, oder doch doppelt abfragen

Ein Thema von waldforest · begonnen am 10. Aug 2015 · letzter Beitrag vom 10. Aug 2015
Antwort Antwort
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

Summenbildung über Query, oder doch doppelt abfragen

  Alt 10. Aug 2015, 17:57
Datenbank: Firebird • Version: 2.5 • Zugriff über: zeos
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 ?
mfg wf

Geändert von waldforest (10. Aug 2015 um 18:13 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Summenbildung über Query

  Alt 10. Aug 2015, 18:12
Z.B. mit einer SP
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Summenbildung über Query, oder doch doppelt abfragen

  Alt 10. Aug 2015, 18:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Summenbildung über Query, oder doch doppelt abfragen

  Alt 10. Aug 2015, 19:00
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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Summenbildung über Query, oder doch doppelt abfragen

  Alt 10. Aug 2015, 20:34
Oder mal diesen Artikel lesen
http://edn.embarcadero.com/article/29272
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Summenbildung über Query, oder doch doppelt abfragen

  Alt 10. Aug 2015, 20:44
Einfach ne vernünftige Grid Komponente nutzen, die sowas kann
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 09:41 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