Neuer Tag, neues Problem..
Wie ich schon gestern gesagt habe, brauchte ich die Spalte mit den Summen, um dann weitere Analyse durchführen zu können. Nun ist es soweit. Ich habe eine Tabelle, in die bestimmte Werte (als varchar) eingefügt werden müssen, je nachdem, wie das Ergebnis einer mathematischen Operation in einer anderen Tabelle aussieht.
Ein Beispiel:
Die Spalte bewertung der Tabelle tabelle2 sollte jetzt folgendermaßen gefüllt werden:Code:test=# update inka set sumarea = foo.sum from (select distr, sum(area) from inka group by distr) foo where inka.distr = foo.distr; test=# select * from inka; distr | poskey | area | sumarea ------+---------+-------+--------- distrA | poskeyA | 10000 | 30000 distrA | poskeyB | 20000 | 30000 distrB | poskeyA | 30000 | 70000 distrB | poskeyB | 40000 | 70000 (4 rows) test=# select * from tabelle2; distr | bewertung -------+--------- distrA | distrB | distrB | distrC | (4 rows)
Falls area/sumarea*100<10, dann bewertung=schlecht.
Falls area/sumarea*100>10 und area/sumarea*100<50, dann bewertung=gut.
Anderfalls bewertung=super.
Ich dachte, dass ich die Anfrage mit dem CASE lösen kann, sodass es dann ungefähr so aussieht:
Aber ich bekomme Fehlermeldung "als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile". Mir ist klar, dass ich offenbar in meinem SELECT kein CASE benutzen darf. Die Frage ist, wodurch kann ich CASE ersetzen, damit die Anfrage funktioniert?Code:UPDATE tabelle2 SET bewertung= SELECT (CASE WHEN area/sumarea*100<10 THEN 'schlecht' WHEN area/sumarea*100>10 AND area/sumarea<50 THEN 'gut' ELSE 'super' END) FROM inka) WHERE distr = 'distrA';



LinkBack URL
About LinkBacks
Zitieren

Lesezeichen