![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
Berechnete Spalte erstellen
Hallo,
ich habe in einer Datenbanktabelle eine Currency Spalte und möchte je nach dem ob der Betrag darin positiv oder negativ ist in einer anderen Spalte (= "berechnete" Spalte) ein entsprechendes Kennzeichen haben. Gibt's dafür einen Lösungsansatz? Falls ja, wie sieht der aus? Das würde nämlich eine gewisse Sortierlogik sehr vereinfachen. Grüße TurboMagic |
AW: Berechnete Spalte erstellen
Per Trigger beim Insert und / oder Update.
SQL-Code:
CREATE TABLE TEST
( BETRAG DECIMAL(18,4), PLUSMINUS INTEGER ); SET TERM ^ ; CREATE TRIGGER TR_Test_PlusMinus FOR test ACTIVE BEFORE INSERT or UPDATE POSITION 0 AS BEGIN if (new.betrag < 0) then new.PlusMinus = 0; else new.PlusMinus = 1; END^ SET TERM ; ^ insert into test (betrag) values (-1.0); insert into test (betrag) values (1.0); select * from test; Betrag PlusMinus -1.0000 0 1.0000 1 |
AW: Berechnete Spalte erstellen
Sehe ich das richtig, dass das dann eine persistente Spalte sein müsste?
Gibt's auch was, das beim Select funktioniert? |
AW: Berechnete Spalte erstellen
Vielleicht solltet Du zuerst einmal etwas genauer spezifizieren, was Du vor hast. Momentan hab' ich keinerlei Vorstellung davon, wofür das gut sein soll.
SQL-Code:
sollte erstmal die Beträge von -unendlich bis +unendlich in aufsteigender Reihenfolge sortieren,
select Betrag from Tabelle order by 1
SQL-Code:
dito., nur absteigend sortiert.
select Betrag from Tabelle order by 1 desc
Aber vermutlich ist das ja jetzt nicht zwingend das, was Du erreichen möchtest.
SQL-Code:
Das ist jetzt nicht statisch.
select
Betrag, case when betrag < 0 then -1 else +1 end as BerechneteSpalte from Tabelle Oder:
SQL-Code:
Das ist auch nicht statisch.
select
Betrag, case when betrag < 0 then 1 else 0 end as IchBinNegativ, case when betrag > 0 then 1 else 0 end as IchBinPositiv, case when betrag = 0 then 1 else 0 end as IchBin0, case when betrag is null then 1 else 0 end as IchBinNull from Tabelle
SQL-Code:
select
Sum(Betrag) as Betrag_Summe, Sum(IchBinNegativ) as AnzahlWerteDieNegativSind, Sum(IchBinPositiv) as AnzahlWerteDiePositiveSind, Sum(IchBin0) as AnzahlWerteDie0Sind, Sum(IchBinNull) as AnzahlWerteDieNullSind from ( select Betrag, case when betrag < 0 then 1 else 0 end as IchBinNegativ, case when betrag > 0 then 1 else 0 end as IchBinPositiv, case when betrag = 0 then 1 else 0 end as IchBin0, case when betrag is null then 1 else 0 end as IchBinNull from Tabelle )
SQL-Code:
Nur, was machen wir jetzt damit?
select
Sum(Betrag) as Betrag_Summe, Sum(case when betrag < 0 then 1 else 0 end) as AnzahlWerteDieNegativSind, Sum(case when betrag > 0 then 1 else 0 end) as AnzahlWerteDiePositiveSind, Sum(case when betrag = 0 then 1 else 0 end) as AnzahlWerteDie0Sind, Sum(case when betrag is null then 1 else 0 end) as AnzahlWerteDieNullSind from Tabelle |
AW: Berechnete Spalte erstellen
Danke, das muss ich Mal ausprobieren.
Ich habe ein VST und wenn man da auf den Header klickt wird die Sortierreihenfolge durch einen Select umgesetzt, was für die eine Spalte des VST, die nicht direkt aus der DB kommt so halt bisher nicht möglich. |
AW: Berechnete Spalte erstellen
Funktioniert! Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 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 by Thomas Breitkreuz