Abfrage mit case when

Hallo,

ich möchte eine Abfrage machen, bei der ich einen Wert abfrage, dem ich über diesen Wert dann einen anderen Wert zuweisen muss.
DH. Ich möchte abfragen ob der Wert 1 ist, wenn ja weise der neuen Spalte 104 zu.

Folgende Abfrage habe ich erstellt:

select a.tkl_text_100,
case WHEN (select b.art_nr from gebiete25_sachdaten where b.art_nr=1) THEN (Select a.tkl_text_100 from sachdaten_zuordnung where a.tkl_number_10=104)
END
from sachdaten_zuordnung a,gebiete25_sachdaten b;

Nun bekomm ich folgende Fehlermeldung:
FEHLER: Argument von CASE/WHEN muss Typ boolean haben, nicht Typ integer.

Kann mir hier jemand helfen?

Klar, lese die Fehlermeldung :wink:

Das, was aus dem Ausdruck nach dem WHEN rausfällt, muß BOOL sein. Bei Dir kommt eine Artikelnummer, die sehr wahrscheinlich nicht Ja/Nein ist.


test=*# select i, case when (select 1) = 1 then 'ja' else 'nein' end as bla from foo;
 i | bla
---+-----
 1 | ja
 2 | ja
 3 | ja
 4 | ja
(4 rows)

Time: 15,912 ms
test=*# select i, case when (select 2) = 1 then 'ja' else 'nein' end as bla from foo;
 i | bla
---+------
 1 | nein
 2 | nein
 3 | nein
 4 | nein
(4 rows)

Du suchst möglicherweise exists(), guggst Du PostgreSQL: Documentation: 9.2: Subquery Expressions, oder nimmst die schließende Klammer vor.


Andreas

Ich bin mir nicht sicher ob ich mit Exists() zum Ziel komme.
In Java würde ich es wie folgt schreiben:

if art_nr==1 then tkl_nummer_10 = 104.

Wobei art_nr in einer Tabelle drin steckt und tkl_nummer_10 in einer anderen Tabelle.

Diese Zuordnung muss ich für 13 verschiedene Werte machen.

Wie komme ich hier mit sql zum Ziel?

Zeig mal bitte create table für die Tabellen (nur relevante spalten), Beispieldaten und was rauskommen soll. Wie sind die Tabellen verknüpft?

Andreas