Esempi sull'utilizzo di CASE e CASE2

Vogliamo inserire uno sconto in base al fornitore dell'articolo. In questo caso si può ottenere lo stesso risultato utilizzando sia la funzione CASE(Exp,Val1,a,Val2,b,,,,n), sia la funzione CASE2(Exp1,a,Exp2,b,,,,n).

Inseriamo alla query un nuovo campo vuoto e vi inseriamo, tramite l'Expression Builder, l'espressione

[CASE(articoli.FORNITORE,'000001',5,'000002',4,0)]
Quanto scritto sopra significa "Se il codice del fornitore è uguale a '000001', allora il valore dello sconto è 5. Se il codice del fornitore è uguale a '000002', allora il valore dello sconto è 4. Altrimenti il valore dello sconto è 0".

Tradotto in SQLServer, corrisponde a

CASE articoli.FORNITORE WHEN '000001' THEN 5 WHEN '000002' THEN 4 ELSE 0 END

Possiamo ottenere lo stesso risultato con la CASE2(Exp1,a,Exp2,b,,,,n):

[CASE2(articoli.FORNITORE='000001',5,articoli.FORNITORE='000002',4,0)]
che, tradotto in SQLServer, corrisponde a

CASE WHEN articoli.FORNITORE='000001' THEN 5 WHEN articoli.FORNITORE='000002' THEN 4 ELSE 0 END

Se vogliamo inserire nella query un campo che indica la disponibilità dell'articolo. In questo caso, si deve utilizzare la funzione CASE2(Exp1,a,Exp2,b,,,,n) perché la funzione CASE(Exp,Val1,a,Val2,b,,,,n) applica automaticamente la condizione di confronto di uguaglianza.

La funzione CASE2(Exp1,a,Exp2,b,,,,n) sarà applicata nel seguente modo:

[CASE2(articoli.QUANTITA>0,S,N)]
che sarà tradotto nella seguente frase SQLServer

CASE WHEN articoli.QUANTITA>0 THEN S ELSE N END

Nota bene

CASE e CASE2 differiscono sostanzialmente nel fatto che le condizioni di confronto del CASE sono solo di tipo uguaglianza, mentre le condizioni di confronto di CASE2 possono essere di qualsiasi tipo.