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
Zwischenablage01.jpg (8.56 KiB) 18445 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.