Istruzione SQL CASE: logica condizionale nelle tue query

Published: 2026-02-11

L’istruzione CASE è il modo in cui SQL aggiunge logica condizionale alle tue query. Funziona come un’istruzione if-then-else, permettendoti di restituire valori diversi in base alle condizioni. CASE è supportata in tutti i principali database SQL, inclusi SQLite, PostgreSQL, MySQL, SQL Server e Oracle.

Dati di esempio

Utilizziamo due tabelle in tutti gli esempi:

Tabella products:

id name category price stock rating
1 Laptop Pro Electronics 1299.99 15 4.5
2 Wireless Mouse Electronics 29.99 50 4.2
3 Office Chair Furniture 249.99 8 4.7
4 Desk Lamp Furniture 39.99 25 3.9
5 Notebook Pack Stationery 12.99 100 4.0
6 Pen Set Stationery 8.99 75 3.5
7 Monitor 27" Electronics 399.99 0 4.6
8 Standing Desk Furniture 599.99 3 4.8

Tabella orders:

id product_id quantity order_date status
1 1 2 2026-02-01 delivered
2 2 5 2026-02-03 shipped
3 3 1 2026-02-05 processing
4 4 3 2026-02-06 delivered
5 5 10 2026-02-07 shipped
6 1 1 2026-02-08 cancelled
7 7 1 2026-02-09 pending
8 8 1 2026-02-10 processing

Espressione CASE semplice

L’espressione CASE semplice confronta una colonna o un’espressione con valori specifici. È concisa quando si controlla l’uguaglianza.

Sintassi

CASE column_name
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

Esempio: categorizzare lo stato degli ordini

Traduci i codici di stato degli ordini in etichette leggibili per l’utente:

Espressione CASE ricercata

L’espressione CASE ricercata valuta condizioni booleane, consentendo confronti complessi e intervalli.

Sintassi

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

Esempio: categorie di prezzo

Classifica i prodotti per fascia di prezzo:

Esempio: stato della disponibilità in magazzino

Determina lo stato dell’inventario con soglie diverse:

Utilizzo di CASE nei calcoli

Le istruzioni CASE possono modificare i calcoli, applicare formule condizionali o gestire valori NULL.

Esempio: applicare sconti in base alla categoria

Calcola gli sconti in base alla categoria del prodotto:

Esempio: priorità degli ordini in base a valore e stato

Calcola la priorità degli ordini in base a più fattori:

CASE nelle aggregazioni

Usa CASE all’interno delle funzioni di aggregazione per creare report simili a pivot o conteggi condizionali.

Esempio: conteggio dei prodotti per disponibilità

Conta quanti prodotti rientrano in ciascuna categoria di stock:

Esempio: ricavi per categoria e stato

Calcola metriche diverse usando aggregazioni condizionali:

CASE in ORDER BY

Usa CASE in ORDER BY per creare logiche di ordinamento personalizzate.

Esempio: ordine di ordinamento personalizzato

Ordina i prodotti con priorità personalizzata (esauriti per primi, poi per valutazione):

Istruzioni CASE annidate

Le espressioni CASE possono essere annidate per una logica più complessa.

Esempio: classificazione complessa dei prodotti

Combina più criteri per una categorizzazione dettagliata:

Casi d’uso comuni per le istruzioni CASE

  • Categorizzazione dei dati — Raggruppa i valori in intervalli o categorie
  • Formattazione condizionale — Mostra etichette o indicatori di stato leggibili
  • Calcoli dinamici — Applica formule diverse in base alle condizioni
  • Creazione di tabelle pivot — Combina con aggregazioni per report a doppia entrata
  • Ordinamento personalizzato — Definisci ordini di ordinamento specifici per logiche di business particolari
  • Gestione dei valori NULL — Sostituisci o evidenzia i dati mancanti
  • Decisioni multi-criterio — Implementa regole di business complesse in SQL

CASE vs. IIF e COALESCE

  • CASE — Il più flessibile, gestisce condizioni multiple
  • IIF(condition, true_value, false_value) — Sintassi più semplice per una singola condizione (SQL Server, Access)
  • COALESCE(val1, val2, …) — Restituisce il primo valore non NULL (utile per la gestione dei NULL)

SQLite supporta sia CASE che COALESCE, ma non IIF. Usa CASE per la massima compatibilità.

Suggerimenti sulle prestazioni

  1. Ordina le condizioni con criterio — Metti per prime le condizioni più probabili
  2. Evita valutazioni ridondanti — CASE viene valutato in sequenza; una volta che una condizione corrisponde, si ferma
  3. Indicizza le colonne appropriate — Se CASE utilizza confronti su colonne, gli indici possono aiutare
  4. Valuta colonne calcolate — Per logiche CASE usate frequentemente, alcuni database supportano colonne calcolate indicizzate
  • CASE aggiunge logica condizionale alle query SQL con un comportamento if-then-else
  • CASE semplice confronta una colonna con valori specifici: CASE column WHEN value THEN result
  • CASE ricercato valuta condizioni booleane: CASE WHEN condition THEN result
  • Può essere usato in SELECT, WHERE, ORDER BY e nelle funzioni di aggregazione
  • Le espressioni CASE possono essere annidate per alberi decisionali complessi
  • Includi sempre una clausola ELSE per gestire valori imprevisti
  • Supportato in tutti i principali database SQL con sintassi coerente

Prova a modificare gli esempi per sperimentare condizioni diverse e vedere come CASE può semplificare la tua logica condizionale!