Sie müssen verstehen, dass Block entspricht NICHT IF { }
aus C-ähnlichen Sprachen. Viel eher entspricht dies einer ausgearbeiteten Version des ... ? ... : ...
Operators aus C-ähnlichen Sprachen. Was es bedeutet, dass der GANZE CASE
Block im Wesentlichen zu einem einzelnen Wert ausgewertet werden muss und dass dieser Wert vom selben Typ sein muss, egal welcher Fall des Blocks ausgeführt wird. Das bedeutet:
CASE
WHEN ts.ACCOUNTTYPE = '1' THEN ts.ACCOUNTID=SI.TENANCYID ...
END
grundsätzlich falsch ist, wenn Sie auf einer Version der Datenbank arbeiten, die Sie Bool Wert als Wert (SQL Server ermöglicht wird es zum Beispiel nicht erlauben, aber ich denke, einige von MySQL-Version verwendet erlauben Sie es - nicht sicher darüber. Sie sollten wahrscheinlich so etwas wie schreiben:
CASE
WHEN ts.ACCOUNTTYPE = '1' AND ts.ACCOUNTID=SI.TENANCYID THEN 1
WHEN ts.ACCOUNTTYPE='2' AND ts.ACCOUNTID=SI.EMPLOYEEID THEN 1
WHEN ts.ACCOUNTTYPE='3' AND ts.ACCOUNTID=SI.SUPPLIERID THEN 1
WHEN ts.ACCOUNTTYPE='4' AND ts.ACCOUNTID=SI.SALESCUSTOMERID THEN 1
ELSE 0
END = 1
Beachten Sie, wie der ganze CASE
Block auf 1 oder 0 ausgewertet wird und dann wird es im Vergleich zu 1. Natürlich statt 4 WHEN
‚s Sie eine WHEN
mit Kombination von AND
verwenden könnten 's, OR
' s und ()
Klammern. Natürlich ist in diesem speziellen Fall die Antwort von @ppeterka 66 korrekt, da CASE
nicht für das geeignet ist, was Sie wirklich tun wollten - ich versuche nur zu klären, was CASE
wirklich ist.
Sie haben die Abfrage ausgeführt, aber Sie haben nicht genau erklärt, was der Grund für einen Fehler war. – nimdil