Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Felder automatisch berechnen in Mastertabelle (https://www.delphipraxis.net/129156-felder-automatisch-berechnen-mastertabelle.html)

Jenns 13. Feb 2009 15:12

Datenbank: SQLServer • Version: 2005 • Zugriff über: ADO

Felder automatisch berechnen in Mastertabelle
 
Hallo,

ich habe folgendes Problem:

Ich habe 2 Tabellen (Rechnung und Position)
die Tabelle Position enthält die einzelnen Rechnungspositionen und hat folgenden Aufbau

Renr | Posnr | Menge | Preis | Gesamtpreis

wobei Renr ein Fremdschlüssel für Rechnung ist und Gesamtpreis ein berechnetes Feld mit Menge * Preis

die Tabelle Rechnung soll so aussehen:

Renr | Summe

wobei Summe die Summe der Gesamtpreise ist, wo die Renr identisch ist.

mit
SQL-Code:
select renr, sum( Gesamtpreis) as Summe from position group by renr
bekomm ich die benötigten Werte, aber wie bekomm ich die an besten in die Rechnungen rein?
Am liebsten wäre mir, wenn das Feld genauso berechnet werden kann, wie der Gesamtpreis, dh, ich muss im Programm nichts beachten und es wird immer von dem SQLServer berechnet berechnet.

Gruß, Jenns

mkinzler 13. Feb 2009 15:19

Re: Felder automatisch berechnen in Mastertabelle
 
Am Besten als Join auf die Gruppierung

joachimd 13. Feb 2009 15:26

Re: Felder automatisch berechnen in Mastertabelle
 
Am besten über Trigger auf der Positionen-Tabelle (ooops - wie ist das nochmal in MS SQL?), bei ADS in etwa so:
SQL-Code:
create trigger trig_ins on position
  after insert
  begin
    declare @renr integer;
    @renr=(select renr from __new);
    update rechnung set summe=(select sum(gesamtpreis) from position where renr=renr)
      where renr=@renr;
  end;
Dasselbe noch für Update und Delete, damit alle Möglichkeiten abgedeckt sind.

mkinzler 13. Feb 2009 15:36

Re: Felder automatisch berechnen in Mastertabelle
 
Man sollte solche Werte nicht in der Mastertabelle ablegen
[Edit: Frau auch, deshalb besser man]

nahpets 13. Feb 2009 15:37

Re: Felder automatisch berechnen in Mastertabelle
 
Hallo,

reicht nicht ein
SQL-Code:
insert into Rechnung select renr, sum(Gesamtpreis) as Summe from position group by renr
Das Select muss halt die Spalten in der Reihenfolge liefern, in der sie in Rechnung definiert sind.
Ggfls. für die Renr noch 'ne passende Wherebedingung.

Update könnte in etwa so gehen:
SQL-Code:
update rechnung
set betrag = (select sum(Gesamtpreis) from position group by renr where rechnung.renr = position.renr)
Falls nur eine Renr aktuallisiert werden soll, noch
SQL-Code:
where renr = :renr
an das Updatestatement hängen.

Die Triggervariante ist jedoch die eleganteste Möglichkeit, da übernimmt die Datenbank 100% der Arbeit.


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