Seite 1 von 1
Tabellenberechnung
Verfasst: Di 24. Mai 2022, 09:06
von cableguy
Hallo,
Ich stehe da momentan ein bischen auf dem Schlauch:
Ich habe eine Tabelle "STÜCKLISTE" mit folgendem Inhalt:

- Zwischenablage01.jpg (8.56 KiB) 41698 mal betrachtet
Jetzt möchte ich gerne die Gesamtzeit berechnen ("Menge" * "ZEIT") und in die letzte Spalte ("GESAMTZEIT") schreiben.
Wie stelle ich das am besten an?
Re: Tabellenberechnung
Verfasst: Di 24. Mai 2022, 10:46
von andi
Hallo,
mittels eines 'Update-Statements':
UPDATE "STÜCKLISTE"
SET GESAMTZEIT = Menge * ZEIT;
Hiermit wreden alle Einträge geändert, wenn nur ein Datensatz geändert werden soll, muss mit einer Restriktion dieser Datensatz selektiert werden:
UPDATE "STÜCKLISTE"
SET GESAMTZEIT = Menge * ZEIT
WHERE ID = 1;
Ich würde vorschlagen, ein Tutorial für SQL im Internet zu suchen. :-;
LG
Re: Tabellenberechnung
Verfasst: Di 24. Mai 2022, 12:50
von martin.koeditz
Alternativ kannst du das auch über einen Trigger lösen. Dieser berechnet die Daten automatisch beim Einfügen oder Ändern eines Datensatzes.
Code: Alles auswählen
CREATE TRIGGER TBL_STUECKLISTE_BIU FOR TBL_STUECKLISTE ACTIVE BEFORE INSERT OR UPDATE POSITION 0 AS
BEGIN
-- Berechne die Gesamtzeit anhand der Menge und Zeit --
-- übergebe dies an die Spalte GESAMTZEIT des neuen Datensatzes.
NEW.GESAMTZEIT = NEW.MENGE * NEW.ZEIT;
END
Gruß
Martin
Re: Tabellenberechnung
Verfasst: Di 24. Mai 2022, 17:00
von Gerd
Hallo
Ich möchte @Martins TRIGGER hier noch an den SQL 2003-Standard anpassen, denn das ist laut Firebird 4 Referenz-Handbuch empfohlen. Der TRIGGER würde demnach wie folgt aufgebaut sein:
Code: Alles auswählen
CREATE TRIGGER tbl_stueckliste_biu
ACTIVE BEFORE INSERT OR UPDATE ON TBL_STUECKLISTE POSITION 0
AS
BEGIN
-- Berechne die Gesamtzeit anhand der Menge und Zeit --
-- übergebe dies an die Spalte GESAMTZEIT des neuen Datensatzes.
NEW.GESAMTZEIT = NEW.MENGE * NEW.ZEIT;
END
Falls der TRIGGER bei Dir nicht funktioniert, müsstest Du Dich mit Folgendem auseinandersetzen:
RECHTE (bspw. SYSDBA - der darf TRIGGERN)
POSITION (hier: 0 - ist Standardeinstellung)
TERMINATOR (bspw. # für das TRIGGER-Konstrukt setzen (bspw. SET TERM #
(Ich habe weder Martins noch meinen davon abgeleiteten TRIGGER geprüft.)
Viele Grüße
Gerd
Re: Tabellenberechnung
Verfasst: Di 31. Mai 2022, 19:42
von bfuerchau
Oder noch einen oben drauf:
Eine View erstellen, die die Berechung enthält, die Spalte kann dann entfallen.
Denn bei Änderung der Ursprungswerte mus auch der Update wiederholt werden.
Bei einer View entfällt das Ganze.