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: 474
- 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
ISQL Version: LI-V5.0.1.1469
Linux Mint 22 Cinnamon 6.2.7
Linux Mint 22 Cinnamon 6.2.7
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.
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.