Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Berechnete Spalte erstellen (https://www.delphipraxis.net/210650-berechnete-spalte-erstellen.html)

TurboMagic 22. Mai 2022 15:06

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

Delphi.Narium 22. Mai 2022 16:16

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

TurboMagic 22. Mai 2022 17:16

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?

Delphi.Narium 22. Mai 2022 17:34

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:
select Betrag from Tabelle order by 1
sollte erstmal die Beträge von -unendlich bis +unendlich in aufsteigender Reihenfolge sortieren,
SQL-Code:
select Betrag from Tabelle order by 1 desc
dito., nur absteigend sortiert.

Aber vermutlich ist das ja jetzt nicht zwingend das, was Du erreichen möchtest.
SQL-Code:
select
Betrag,
case when betrag < 0 then -1 else +1 end as BerechneteSpalte
from Tabelle
Das ist jetzt nicht statisch.

Oder:
SQL-Code:
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
Das ist auch nicht statisch.
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:
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
Nur, was machen wir jetzt damit?

TurboMagic 22. Mai 2022 17:41

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.

TurboMagic 22. Mai 2022 18:03

AW: Berechnete Spalte erstellen
 
Funktioniert! Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz