1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

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

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von altirum, 30 August 2018.

  1. altirum

    altirum Neuer Benutzer

    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!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  4. altirum

    altirum Neuer Benutzer

    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?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  6. altirum

    altirum Neuer Benutzer

    Danke! Ich hab schon eine Lösung.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Und wie funktioniert die Lösung?

    Fragen und Antworten ...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden