Hallo,
(CASE
WHEN pgd = 'R' THEN 1
WHEN (pgd = 'R' AND cond = 'RZ') THEN 0 -- kann nie eintreten
WHEN (pgd = 'R' AND cond = 'RK') THEN 0 -- kann nie eintreten
ELSE
pgd
END)
*
Rest der Query
> Wenn die Spalte 'pgd' den Inhalt 'R' hat, soll der Faktor 1 genommen werden, es sei denn, dass in der betreffenden Zeile die Spalte 'cond' den Inhalt 'RZ' oder 'RK' hat. Dann soll nämlich der Faktor 0 genommen werden.
>
> Lieder wird immer der Faktor 1 genommen.
nö, der ELSE-Fall dürfte auch eintreten
> Habe ich eine fehlerhafte Syntax oder einen Logigfehler in der Query?
einen Logikfehler. Deine Abfrage ist äquivalent zu:
~~~sql
(CASE
WHEN pgd = 'R' THEN 1
ELSE pgd
END)
da in Deiner Form CASE das Ergebnis für den ersten zutreffenden Zweig zurückliefert, siehe Handbuch:
<zitat>
The second version returns the result for the first condition that is
true. If there was no matching result value, the result after ELSE is
returned, or NULL if there is no ELSE part.
</zitat>
Da Dein zweiter und dritter Fall nur zutreffen können, wenn der erste zutrifft, werden diese beiden Zweige nie beschritten. Du musst die speziellen Fälle somit vor dem allgemeineren Fall notieren
(CASE
WHEN (pgd = 'R' AND cond = 'RZ') THEN 0
WHEN (pgd = 'R' AND cond = 'RK') THEN 0
WHEN pgd = 'R' THEN 1
ELSE pgd
END
So solltest Du das von Dir gewünschte Ergebnis erhalten.
Freundliche Grüße
Vinzenz