Dovete capire che Il blocco CASE ... END
NON è equivalente a IF { }
da lingue simili a C. Molto più questo è equivalente alla versione elaborata dell'operatore ... ? ... : ...
dalle lingue simili a C. Cosa significa che il blocco INTERO CASE
deve essenzialmente valutare il valore singolo e che questo valore deve essere dello stesso tipo, indipendentemente dal caso in cui il blocco viene eseguito. Ciò significa che:
CASE
WHEN ts.ACCOUNTTYPE = '1' THEN ts.ACCOUNTID=SI.TENANCYID ...
END
è fondamentalmente errata a meno che non si lavora su una versione di base di dati che vi permetterà bool valore come un valore (SQL Server non lo permetterà, ad esempio, ma credo che alcuni di versione di MySQL utilizzati per permettilo - non sono sicuro di questo). Probabilmente si dovrebbe scrivere qualcosa come:
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
Notate come l'intero CASE
blocco restituisce 1 o 0 e poi si è paragonato a 1. Naturalmente, invece di 4 WHEN
s' è possibile utilizzare uno WHEN
con la combinazione di AND
's, OR
' s e ()
parentesi. Ovviamente in questo caso specifico la risposta di @ppeterka 66 è corretta poiché CASE
non è adatto per quello che volevi veramente fare - sto solo cercando di chiarire cosa sia veramente CASE
.
Hai eseguito la query ma non hai spiegato esattamente quale fosse il motivo dell'errore. – nimdil