![]() |
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:
bekomm ich die benötigten Werte, aber wie bekomm ich die an besten in die Rechnungen rein?
select renr, sum( Gesamtpreis) as Summe from position group by renr
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 |
Re: Felder automatisch berechnen in Mastertabelle
Am Besten als Join auf die Gruppierung
|
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:
Dasselbe noch für Update und Delete, damit alle Möglichkeiten abgedeckt sind.
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; |
Re: Felder automatisch berechnen in Mastertabelle
Man sollte solche Werte nicht in der Mastertabelle ablegen
[Edit: Frau auch, deshalb besser man] |
Re: Felder automatisch berechnen in Mastertabelle
Hallo,
reicht nicht ein
SQL-Code:
Das Select muss halt die Spalten in der Reihenfolge liefern, in der sie in Rechnung definiert sind.
insert into Rechnung select renr, sum(Gesamtpreis) as Summe from position group by renr
Ggfls. für die Renr noch 'ne passende Wherebedingung. Update könnte in etwa so gehen:
SQL-Code:
Falls nur eine Renr aktuallisiert werden soll, noch
update rechnung
set betrag = (select sum(Gesamtpreis) from position group by renr where rechnung.renr = position.renr)
SQL-Code:
an das Updatestatement hängen.
where renr = :renr
Die Triggervariante ist jedoch die eleganteste Möglichkeit, da übernimmt die Datenbank 100% der Arbeit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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-2025 by Thomas Breitkreuz