Hallo,
Ich stehe da momentan ein bischen auf dem Schlauch:
Ich habe eine Tabelle "STÜCKLISTE" mit folgendem Inhalt:
Jetzt möchte ich gerne die Gesamtzeit berechnen ("Menge" * "ZEIT") und in die letzte Spalte ("GESAMTZEIT") schreiben.
Wie stelle ich das am besten an?
Tabellenberechnung
Moderator: thorben.braun
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
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
- martin.koeditz
- Beiträge: 348
- Registriert: Sa 31. Mär 2018, 14:35
Alternativ kannst du das auch über einen Trigger lösen. Dieser berechnet die Daten automatisch beim Einfügen oder Ändern eines Datensatzes.
Gruß
Martin
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
Martin
Martin Köditz
it & synergy GmbH
it & synergy GmbH
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:
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
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
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
Linux Mint 20.3 Una Cinnamon 5.2.7
Firebird 4.0.1, Embedded, ISQL: LI-V4.0.1.2696
Lazarus 2.2.0 - FPC 3.2.2
Firebird 4.0.1, Embedded, ISQL: LI-V4.0.1.2696
Lazarus 2.2.0 - FPC 3.2.2