Haben: Externen-Datenbank-Tabelle. Soll: when-case Spalten berechnet ausgeben. Aber wie?

altirum

Neuer Benutzer
Beiträge
3
Hallo,

Ich habe eine Datenbank mit Firmen gekriegt. Ich muss aber nur aktive Firmen (Spalte „Aktiv“- ja oder nein) und nur ausländische Firmen (Standort <> Österreich) übriglassen.

My SQL-Code: select* from Originaltabelle as MeineKopie where aktiv=‘ja‘ and standort<>‘Österreich‘

Jetzt muss ich ein zusätzliche Alias Spalte (ohne Original-Datenbank zu ändern) einfügen, die folgend Massen berechnet werden soll:

Wenn Spalte11=‘nicht versichert‘ and Spalte12=‘nicht versichert‘ dann meineBerechneteSpalte=‘nicht versichert‘

Wenn Spalte11=‘Limit‘ and Spalte12=‘Limit‘ dann meineBerechneteSpalte [da kommt Formel1..=Spalte11+Spalte12]

Sonst [da kommt Formel2..]

Mein SQL-Code lautet (funktioniert aber nicht):

select * from Originaltabelle as MeineKopie

where Standort<>‘Österreich‘ and Aktiv=‘ja‘

and

CASE

WHEN Spalte11=‘nicht versichert‘ and Spalte12=‘nicht versichert‘ then meineBerechneteSpalte=‘nicht versichert‘

Wenn Spalte11=‘Limit‘ and Spalte12=‘Limit‘ dann meineBerechneteSpalte =Spalte11+Spalte12]

AS meineBerechneteSpalte

FROM "Originaltabelle

ELSE meineBerechneteSpalte=Spalte11/Spalte12

END

AS meineBerechneteSpalte



Bitte um Hilfe! Danke vorab!
 
Werbung:
Fehler über Fehler ...

  • select * ist böse, zähle gewünschte Spalten auf
  • "select * from table as" ist schlicht falsch, Du kannst so keine Spaltenaliase setzen
  • mit deinem select * ... as Kopie willst Du vermutlich eine andere Tabelle mit dem Resultat füllen, dazu brauchst Du aber ein INSERT oder aber ein CREATE KOPIE AS ...
  • Spaltenberechnungen mittels CASE kommen alle in der Select-Liste, nicht im Where

Es gibt genug Bücher und Doku und Beispiele im Netz, bitte beschäftige Dich erst einmal mit der grundlegenden Syntax von SQL.
 
weitere Fehler:

  • numerierte Spalten ...
  • Spalte11 und Spalte12 enthalten Text wie z.B. 'nicht versichert' oder 'Limit', sollen aber addiert werden. Was erwartest Du von 'nicht versichert' + 'Limit' als Ergebniss?
 
Zuerst, danke für ihre Mithilfe.
So, ich hab mich intensiv mit SQL-Grundlagen beschäftigt, komme aber nicht weiter..
Vergessen Sie den Code oben.
Stellen Sie sich vor: sie kriegen jedes Jahr eine Tabelle in Excel Form mit vielen Daten und anhand diesen Daten sollen sie noch ein paar Spalten erzeugen und berechnen(ohne externen Datenbankstruktur zu ändern). Diesen Spalten werden jedes mal beim Excel-öffnen neu berechnet (Daten werden aktualisiert).
Also: ich berechne erste Spalte(z.B. BruttoPrämie inkl. MaklerProvosion usw.), dann zweite Spalte(die sich auf Ergebnisse von erste Spalte bezieht).
Und dann kommt das Problem: SQL sagt .."ich kenne Spalte-Brutto Prämie nicht".
Frage: wie kann ich das lösen?
Irgendwie denke ich das Problem kann man mit unterabfragen in SQL lösen.
Ideen?
 
was du vermutlich falsch machst: Du berechnest eine neue Spalte und gibst dieser einen Namen. Hier wohl BruttoPrämie. Dann willst Du diese Spalte mit diesem Bezeichner weiter verwenden:

Code:
test=*# create table demo(a int, b int, c int);
CREATE TABLE
test=*# insert into demo values (3,4,5);
INSERT 0 1
test=*# select a+b as zwischensumme from demo;
 zwischensumme
---------------
             7
(1 row)

test=*# select a+b as zwischensumme, zwischensumme + c as endsumme from demo;
FEHLER:  Spalte »zwischensumme« existiert nicht
LINE 1: select a+b as zwischensumme, zwischensumme + c as endsumme f...

Das geht also so nicht. Mögliche Lösungen:

Code:
test=*# select a+b as zwischensumme, a+b + c as endsumme from demo;
 zwischensumme | endsumme
---------------+----------
             7 |       12
(1 row)

test=*# select zwischensumme, zwischensumme + c from (select a+b as zwischensumme, c from demo) as subselect;
 zwischensumme | ?column?
---------------+----------
             7 |       12
(1 row)

test=*# select zwischensumme, zwischensumme + c as endsumme from (select a+b as zwischensumme, c from demo) as subselect;
 zwischensumme | endsumme
---------------+----------
             7 |       12
(1 row)

test=*#
 
Werbung:
Zurück
Oben