SQL Stenografia CASE in SELECT


Esempio

La variante abbreviata di CASE valuta un'espressione (solitamente una colonna) rispetto a una serie di valori. Questa variante è un po 'più corta e salva ripetutamente l'espressione valutata più volte. La clausola ELSE può ancora essere utilizzata, tuttavia:

SELECT Id, ItemId, Price,
  CASE Price WHEN 5  THEN 'CHEAP'
             WHEN 15 THEN 'AFFORDABLE'
             ELSE         'EXPENSIVE'
  END as PriceRating
FROM ItemSales

Una parola di cautela. È importante rendersi conto che quando si utilizza la variante breve l'intera istruzione viene valutata in ogni WHEN . Pertanto la seguente dichiarazione:

SELECT 
    CASE ABS(CHECKSUM(NEWID())) % 4
        WHEN 0 THEN 'Dr'
        WHEN 1 THEN 'Master'
        WHEN 2 THEN 'Mr'
        WHEN 3 THEN 'Mrs'
    END

può produrre un risultato NULL . Questo perché in ogni WHEN NEWID() viene chiamato di nuovo con un nuovo risultato. Equivalente a:

SELECT 
    CASE 
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 0 THEN 'Dr'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 1 THEN 'Master'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 2 THEN 'Mr'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 3 THEN 'Mrs'
    END

Pertanto può perdere tutti i casi WHEN e risultare NULL .