Einzelnen Beitrag anzeigen

BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
801 Beiträge
 
Delphi 11 Alexandria
 
#1

[SQL] Zwischensummen

  Alt 3. Apr 2022, 10:30
Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC
Hallo,
ich habe eine Tabelle mit Rechnungspositionen. Diese wird in einem CxGrid dargestellt. Eine vereinfachte Darstellung, nur mit den für die Fragestellung relevanten Feldern, ist unten zu sehen.
Nun möchte ich die Möglichkeit haben Zwischesummen auszurechnen und anzuzeigen. Und zwar auf zwei verschiedene Arten:

1)
Hier soll die Zwischensumme die Summe aller Positionen vom Anfang der Tabelle bis zur ersten Zwischensumme (A) oder die Summe zwischen zwei Zwischensummen (B) sein:
Code:
Position Artikeltyp   Bezeichnung  Preis
       1 Artikel      Tastatur       50
       2 Artikel      Maus           10
(A)      Zwischesumme Zwischesumme   60 (=50+10)
       3 Artikel      MS Office     100
       4 Artikel      Photoshop     200
(B)      Zwischesumme Zwischensumme 300 (=100+200)
Die Rechnungssume beträgt hier 360 EUR. (Ist nicht Bestandteil der Tabelle.)

2)
Hier soll es eine spezielle Zwischensumme (C) geben: Dabei wird zuerst wieder die Zwischensumme wie gehabt berechnet nun aber mit einem Kommissionssatz multipliziert. Nur das Ergebnis davon geht in die Gesamte Rechnungssume ein. Die Preise Positionen 1 und 2 sind nur für die Rechnung wichtig und dürfen nicht mehr in der Rechnungssume berücksichtig werden.

Code:
Position Artikeltyp        Bezeichnung      Preis
       1 KommisionsArtikel Tastatur          50
       2 KommisionsArtikel Maus              10
(C)      KommisionsSumme   10 % Kommision     6 (=Kommissionssatz 10 % auf Zwischensumme 60 EUR = 6 EUR [weil: (50+10) * 0,1 = 6]
       3 Artikel           MS Office        100
       4 Artikel           Photoshop        200
(D)      Zwischensumme     Zwischensumme    300 (=100+200)
Die Rechnungssume beträgt hier 306 EUR. (Ist nicht Bestandteil der Tabelle.)

Weiterhin möchte ich die Summe aller Rechnungen möglichst einfach bilden können. Z.B. so:
Code:
Select sum(Preis) from RechnungsPositionen where Artikeltyp = 'Artikel' or Artikeltyp ='KommisionsSumme'
Wie mache ich das am besten? Trigger auf die Rechnungspostionen? Immer wenn es eine Änderung gibt, schauen ob die Zwischesummen berechnet werden müssen? Wie würde das SQL für eine Zwischensumme aussehen? Wie wird mein CxGrid dann aktualisiert? Durch den Trigger könnte ja ein anderer Datensatz geändert werden, als der Datensatz in dem ich gerade mit dem Cursor bin. Wie bekommt das cxGrid das mit?
Oder sollten die Zwischensummen gar nicht in der DB gespeichert werden und nur in der GUI angezeigt werden? Bei dem Kommissionssatz müssen sie aber in die DB, da sie dort für die Rechnungssume gebraucht wird.

Wie würde man mit diesen Anforderungen am besten umgehen? Danke!
  Mit Zitat antworten Zitat