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
Esplora il dataset in DbGate Lite

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 (searched)

L’espressione CASE ricercata valuta condizioni booleane, permettendo 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à a magazzino

Determina lo stato dell’inventario con soglie diverse:

Uso di CASE nei calcoli

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

Esempio: applicare sconti basati sulla categoria

Calcola gli sconti in base alla categoria del prodotto:

Esempio: priorità degli ordini per 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: conteggiare i 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 (prima quelli esauriti, poi per valutazione):

Istruzioni CASE annidate

Le espressioni CASE possono essere annidate per logiche più complesse.

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 matrice
  • 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 usa 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 (searched) 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!