Se lavori con i dati, l'istruzione CASE WHEN in SQL è come un coltellino svizzero per le tue query. È una di quelle clausole che, una volta scoperta, ti chiedi come hai fatto a farne a meno. Ti permette di inserire logica condizionale (tipo "se succede questo, allora fai quello") direttamente nella tua analisi
Invece di esportare migliaia di righe su un foglio di calcolo per poi segmentare i clienti o classificare le vendite a mano, con CASE WHEN puoi integrare questa logica direttamente nella query. Per te, questo significa report più veloci, analisi più precise e, in definitiva, decisioni di business più intelligenti. Questo è il primo passo per rendere le tue analisi dati davvero proattive.
Immagina un flusso disordinato di dati, come una fila di auto in autostrada. Senza regole, è solo un lungo serpentone di veicoli. CASE WHEN agisce come un sistema di smistamento intelligente: le auto rosse a sinistra, quelle blu a destra, tutte le altre dritte per la loro strada.
Allo stesso modo, in SQL, puoi prendere i dati e, con una singola clausola, trasformarli in informazioni pulite, organizzate e pronte per essere analizzate.
Per una PMI, questo non è un semplice trucco tecnico, ma un vantaggio strategico concreto. L'analisi dei dati passa da essere un processo reattivo, fatto di passaggi lenti e manuali, a uno proattivo e istantaneo. I vantaggi per il tuo business sono chiari:
In sostanza, il CASE WHEN è il primo passo per trasformare i tuoi dati da semplici numeri in insight strategici. È il ponte che collega una tabella grezza a un report che ti permette di prendere decisioni migliori.
Nelle prossime sezioni vedremo la sintassi esatta ed esempi pratici per padroneggiare questa clausola e risolvere problemi di business concreti.
Per padroneggiare la logica condizionale in SQL, la cosa migliore è partire dalle fondamenta e capire bene la struttura di CASE WHEN. Iniziamo dalla sua forma più diretta, il "CASE Semplice", perfetta per chi sta muovendo i primi passi.
Questa versione è ideale quando devi controllare i valori di una singola colonna e assegnare a ciascuno un risultato diverso. Semplice, pulito, efficace.
La sintassi è sorprendentemente intuitiva. Facciamo un esempio pratico: immagina di avere una colonna StatoOrdine con valori testuali come 'Spedito', 'In Lavorazione' o 'Annullato'. Per i tuoi report, sarebbe molto più comodo avere un codice numerico, no?
Ecco come puoi trasformare quel testo in numeri:
SELECTIDOrdine,StatoOrdine,CASE StatoOrdineWHEN 'Spedito' THEN 1WHEN 'In Lavorazione' THEN 2WHEN 'Annullato' THEN 3ELSE 0 -- Questo è il nostro paracaduteEND AS StatoNumericoFROM Vendite;
Come vedi, CASE punta alla colonna da esaminare (StatoOrdine). Ogni WHEN controlla se il valore è uguale a qualcosa di specifico, e THEN assegna il risultato corrispondente.
La clausola ELSE è fondamentale. È una sorta di rete di sicurezza: se nessuna delle condizioni WHEN è soddisfatta, assegna un valore di default (qui, 0), salvandoti da fastidiosi risultati NULL. Se vuoi vedere tabelle simili in azione, puoi dare un'occhiata a questo esempio di database.
Il "CASE Cercato" (o Searched CASE) è una vera e propria cassetta degli attrezzi. È qui che si scatena la vera flessibilità di questa istruzione, perché non sei più limitato a controllare una sola colonna.
Con il CASE Cercato puoi costruire condizioni complesse, che valutano più campi contemporaneamente usando operatori logici come AND e OR, o di confronto come > e <. È lo strumento perfetto per implementare logiche di business articolate direttamente nella tua query.
Il CASE Cercato non si limita a un semplice controllo di uguaglianza. Valuta se una certa condizione nel suo complesso è vera, dandoti il potere di creare regole sofisticate che rispecchiano le dinamiche reali della tua azienda.
Mettiamo che tu voglia classificare le vendite in base all'importo e alla categoria di prodotto. Ecco come faresti:
SELECTIDProdotto,Prezzo,Categoria,CASEWHEN Prezzo > 1000 AND Categoria = 'Elettronica' THEN 'Vendita Premium'WHEN Prezzo > 500 THEN 'Vendita Alto Valore'ELSE 'Vendita Standard'END AS SegmentoVenditaFROM Vendite;
Questa capacità di intrecciare più condizioni è ciò che rende CASE WHEN un pilastro insostituibile per qualsiasi analisi dati che voglia andare oltre la superficie.
Ecco una tabella che riassume le differenze chiave tra le due sintassi, per aiutarti a scegliere quella giusta al momento giusto.
Questa tabella mette a confronto diretto le due principali forme della clausola CASE, evidenziando quando usare ciascuna e mostrando la loro struttura fianco a fianco per una comprensione immediata.
Scegliere tra le due non è una questione di "meglio" o "peggio", ma di usare lo strumento più adatto al lavoro da svolgere. Per controlli diretti e veloci, il CASE Semplice è perfetto; per logiche di business complesse, il CASE Cercato è la scelta obbligata.
Visivamente, puoi immaginare CASE WHEN come un albero decisionale che prende i dati grezzi e li instrada verso categorie ben definite, portando ordine e chiarezza nelle tue analisi.

Questa immagine mostra proprio questo: come una singola istruzione SQL possa prendere ogni cliente e, in base a un paio di regole, indirizzarlo verso la categoria corretta. È il potere della logica condizionale applicata ai dati.
Ora che la sintassi non ha più segreti, è il momento di vedere CASE WHEN all’opera in scenari di business reali. La vera potenza di questa clausola emerge quando la usi per trasformare numeri e codici in insight concreti, in vere e proprie indicazioni strategiche per la tua azienda.
Ci concentreremo su due applicazioni fondamentali: la segmentazione dei clienti e l'analisi della marginalità dei prodotti. Questo è il primo, decisivo passo per prendere decisioni basate sui dati e non sull'istinto.
Uno degli obiettivi più comuni per qualsiasi azienda è capire chi sono i clienti migliori. Identificare i segmenti di clientela ad alto, medio e basso valore ti permette di personalizzare le campagne di marketing, ottimizzare le strategie di vendita e migliorare la fidelizzazione.
Con CASE WHEN, puoi creare questa segmentazione direttamente nella tua query. Immagina di avere una tabella FatturatoClienti con le colonne ClienteID e TotaleAcquistato.
Ecco come potresti etichettare ogni cliente in un colpo solo:
SELECTClienteID,TotaleAcquistato,CASEWHEN TotaleAcquistato > 5000 THEN 'Alto Valore'WHEN TotaleAcquistato BETWEEN 1000 AND 5000 THEN 'Medio Valore'ELSE 'Basso Valore'END AS SegmentoClienteFROM FatturatoClientiORDER BY TotaleAcquistato DESC;
Con questa singola istruzione, hai aggiunto una nuova colonna, SegmentoCliente, che arricchisce i dati grezzi con un contesto di business immediato. Ora puoi facilmente contare quanti clienti hai per ogni segmento o analizzare i loro comportamenti d'acquisto specifici, migliorando il ROI delle tue campagne marketing.
Un altro utilizzo strategico del case when sql è l'analisi della redditività. Non tutti i prodotti contribuiscono allo stesso modo ai profitti. Classificare gli articoli in base alla loro marginalità ti aiuta a decidere dove concentrare gli sforzi, quali mettere in promozione e quali, forse, è il caso di abbandonare.
Prendiamo una tabella Prodotti con PrezzoVendita e CostoAcquisto. Per prima cosa calcoliamo la marginalità, e subito dopo la classifichiamo.
SELECTNomeProdotto,PrezzoVendita,CostoAcquisto,CASEWHEN (PrezzoVendita - CostoAcquisto) / PrezzoVendita > 0.5 THEN 'Alta Marginalità'WHEN (PrezzoVendita - CostoAcquisto) / PrezzoVendita BETWEEN 0.2 AND 0.5 THEN 'Media Marginalità'ELSE 'Bassa Marginalità'END AS CategoriaMarginalitaFROM ProdottiWHERE PrezzoVendita > 0; -- Fondamentale per evitare divisioni per zero
Anche qui, una sola query ha trasformato semplici colonne di prezzo in una classificazione strategica, pronta per essere usata nei tuoi report per ottimizzare il catalogo e massimizzare i profitti.

Saper scrivere queste query è un'abilità preziosissima. Ma cosa succede quando le esigenze diventano più complesse o quando i manager non tecnici hanno bisogno di creare questi segmenti al volo? È qui che entrano in gioco le moderne piattaforme di data analytics no-code.
Questo non rende SQL obsoleto, anzi, ne amplifica il valore. La logica rimane identica, ma l'esecuzione diventa automatizzata e alla portata di tutto il team. Il risultato è un ROI immediato: i team di business possono esplorare i dati e creare segmenti complessi senza dipendere dal reparto IT, accelerando drasticamente il processo che porta dai dati grezzi alle informazioni utili per le decisioni. Gli analisti, a loro volta, sono liberi di dedicarsi a problemi più complessi, sapendo che le analisi di routine sono gestite in automatico.
Bene, ora che hai preso confidenza con la segmentazione di base, è il momento di alzare il livello. Scopriamo insieme come trasformare CASE WHEN in uno strumento per analisi complesse e reportistica avanzata, il tutto dentro una singola query.

Una delle tecniche più potenti è combinare CASE WHEN con funzioni di aggregazione come SUM, COUNT o AVG. Questo trucco ti permette di creare delle "pivot table" direttamente in SQL, calcolando metriche specifiche per segmenti diversi senza dover lanciare query multiple.
Mettiamo caso che tu voglia confrontare, nello stesso report, il fatturato totale generato dai clienti 'Premium' rispetto a quello dei clienti 'Standard'. Puoi fare tutto in un colpo solo.
SELECTSUM(CASE WHEN SegmentoCliente = 'Premium' THEN Fatturato ELSE 0 END) AS FatturatoPremium,SUM(CASE WHEN SegmentoCliente = 'Standard' THEN Fatturato ELSE 0 END) AS FatturatoStandardFROM Vendite;
Cosa sta succedendo qui? La funzione SUM somma il Fatturato solo quando la condizione specificata nel WHEN è vera. Per tutte le altre righe, somma zero. È un modo incredibilmente efficiente per aggregare dati su più dimensioni contemporaneamente, risparmiando tempo e complessità.
A volte, la logica di business non è così lineare. Magari hai bisogno di segmentare i clienti non solo in base a quanto spendono, ma anche in base a quanto spesso acquistano. Qui entra in gioco una logica a più livelli, che puoi implementare annidando un CASE dentro un altro.
Un CASE nidificato ti permette di creare sotto-categorie precise. Ad esempio, potremmo voler dividere i nostri clienti "Alto Valore" in due ulteriori gruppi: i "Fedeli" e gli "Occasionali".
SELECTClienteID,TotaleSpeso,NumeroAcquisti,CASEWHEN TotaleSpeso > 5000 THENCASEWHEN NumeroAcquisti > 10 THEN 'Alto Valore - Fedele'ELSE 'Alto Valore - Occasionale'ENDWHEN TotaleSpeso > 1000 THEN 'Medio Valore'ELSE 'Basso Valore'END AS SegmentoDettagliatoFROM RiepilogoClienti;
Attenzione alla leggibilità: sebbene potentissimi, i CASE nidificati possono diventare un incubo da leggere e manutenere. Se la logica supera i due livelli di profondità, fermati. Forse è il caso di spezzare il problema in più passaggi, magari usando delle Common Table Expressions (CTE) per rendere il tutto più pulito.
Sebbene CASE WHEN sia uno standard SQL consolidato, esistono piccole differenze di implementazione tra i vari sistemi di gestione di database (DBMS). Conoscerle è fondamentale per scrivere codice portabile.
CASE praticamente ovunque: nelle clausole SELECT, WHERE, GROUP BY e ORDER BY.THEN sono gestite in modo prevedibile.CASE alla perfezione, ma offre anche la funzione non standard IIF(condizione, valore_se_vero, valore_se_falso). IIF è una scorciatoia per logiche binarie semplici (un solo IF/ELSE), ma CASE WHEN rimane la scelta migliore per leggibilità e portabilità.Conoscere queste sfumature ti aiuterà a scrivere query case when sql che non solo funzionano, ma sono anche robuste e facilmente adattabili a diversi contesti tecnologici.
Scrivere una CASE WHEN che funziona è solo il primo passo. Il vero salto di qualità arriva quando impari a renderla non solo corretta, ma anche veloce e a prova di errore. Una query lenta o piena di bug può mandare all'aria i tuoi report e rallentare le decisioni di business.
Vediamo insieme come affinare la tecnica, evitare le trappole più comuni e ottimizzare le performance delle tue analisi.
Ecco un dettaglio che spesso si sottovaluta: in una clausola CASE WHEN, il database analizza le condizioni nell'ordine esatto in cui le hai scritte. Appena ne trova una vera, si ferma e restituisce il risultato.
Questo comportamento ha un impatto enorme sulle performance, specialmente quando lavori su tabelle con milioni di righe.
Il trucco? Metti sempre per prime le condizioni che pensi si verificheranno più spesso. In questo modo, il motore del database farà il minimo sforzo per la maggior parte delle righe, riducendo drasticamente il tempo di esecuzione.
Anche gli analisti più esperti, ogni tanto, cadono in qualche errore classico. Conoscerli è il modo migliore per individuarli al volo e correggerli.
ELSEELSE e nessuna delle tue condizioni WHEN si verifica, il risultato per quella riga sarà NULL. Questo NULL inaspettato può creare un effetto a catena, sballando calcoli successivi.SELECTPrezzo,CASEWHEN Prezzo > 100 THEN 'Alto'WHEN Prezzo > 50 THEN 'Medio'END AS FasciaPrezzo -- Se Prezzo è 40, il risultato è NULLFROM Prodotti;ELSE come rete di sicurezza per catturare tutti i casi non previsti.SELECTPrezzo,CASEWHEN Prezzo > 100 THEN 'Alto'WHEN Prezzo > 50 THEN 'Medio'ELSE 'Basso' -- Ecco la nostra rete di sicurezza!END AS FasciaPrezzoFROM Prodotti;THEN devono restituire lo stesso tipo di dato (o tipi compatibili). Se provi a mischiare testo, numeri e date nella stessa colonna generata dal CASE, il database ti restituirà un errore.WHEN TotaleAcquistato > 1000 prima di WHEN TotaleAcquistato > 5000, nessun cliente verrà mai etichettato come 'VIP', perché la prima condizione lo "catturerà" sempre prima.Sebbene case when sql sia lo standard universale – e quasi sempre la scelta migliore per leggibilità e compatibilità – alcuni dialetti SQL offrono delle scorciatoie.
In SQL Server, ad esempio, trovi la funzione IIF(condizione, valore_se_vero, valore_se_falso). È comoda per una logica binaria semplice, ma CASE rimane imbattibile per gestire condizioni multiple e per la sua chiarezza in scenari complessi.
Per la stragrande maggioranza dei casi, attenersi allo standard CASE WHEN è la scelta più saggia. Garantisce che il tuo codice sia compreso da chiunque e che funzioni senza sorprese su diverse piattaforme.
Scrivere query CASE WHEN è utile. Ma se ti ritrovi a riscrivere la stessa logica di segmentazione ogni settimana per i report mensili, o peggio, se il tuo team marketing ti chiede "puoi aggiungere anche questo segmento?" ogni due giorni, hai un problema di scalabilità, non di SQL.
La logica condizionale rimane identica - che la scrivi a mano o che la definisci tramite interfaccia - ma il tempo che ci metti cambia radicalmente. Una query che richiede 20 minuti per essere scritta, testata e documentata può essere ricreata in 2 minuti con un'interfaccia visuale. Moltiplicalo per tutte le analisi che fai in un mese e capisci dove va il tempo.
Il vero problema non è scrivere SQL. È che mentre tu scrivi query, qualcun altro nel tuo team aspetta i dati per prendere decisioni. E quando finalmente i dati arrivano, spesso la finestra utile per agire si è già ristretta.
Piattaforme come ELECTE automatizzano esattamente questo: la traduzione da logica business a query. Non elimina il valore di saper scrivere SQL - anzi, capire cosa succede sotto il cofano ti rende molto più efficace nell'usare qualsiasi strumento di analytics. Ma ti toglie il lavoro ripetitivo.
La differenza pratica: invece di passare ore a scrivere e debuggare query per segmentare clienti, dedichi 5 minuti a definire le regole e il resto del tempo ad analizzare cosa significano quei segmenti per il business. Non è magia, è semplicemente rimuovere l'attrito tra "ho una domanda" e "ho una risposta".
Se passi metà giornata a estrarre dati invece che ad analizzarli, probabilmente hai già capito dove sta il collo di bottiglia.
Piattaforme come ELECTE automatizzano la logica del CASE WHEN attraverso interfacce no-code. Definisci le regole di segmentazione con pochi click, senza scrivere una riga di codice. Il risultato: analisi che prima richiedevano ore sono pronte in minuti, accessibili a tutto il team senza dipendere dall'IT
Dietro le quinte, la piattaforma esegue logiche condizionali simili—e spesso molto più avanzate—liberandoti da compiti ripetitivi. Questo permette a manager e analisti di concentrarsi sul "perché" dietro i numeri, anziché sul "come" estrarli.
Anche dopo aver visto parecchi esempi, è normale avere ancora qualche curiosità. Rispondiamo alle domande più comuni che emergono quando si inizia a usare CASE WHEN in SQL.
La differenza chiave: portabilità. Il CASE WHEN è parte dello standard SQL (ANSI SQL), il che significa che il tuo codice funzionerà praticamente su qualsiasi database moderno, da PostgreSQL e MySQL a SQL Server e Oracle.
L'istruzione IF(), invece, è spesso una funzione specifica di un certo dialetto SQL, come il T-SQL di SQL Server. Sebbene possa sembrare più breve per una semplice condizione binaria, CASE WHEN è la scelta da professionisti per scrivere codice leggibile e che funzioni ovunque senza modifiche.
Assolutamente sì. Non è l'uso più comune, ma in certi scenari è incredibilmente potente per creare filtri condizionali complessi. Immagina, ad esempio, di voler estrarre tutti i clienti "premium", oppure solo i clienti "standard" che non acquistano da più di un anno.
Ecco come potresti impostare la logica:
SELECT NomeCliente, UltimoAcquistoFROM ClientiWHERECASEWHEN Segmento = 'Premium' THEN 1WHEN Segmento = 'Standard' AND UltimoAcquisto < '2023-01-01' THEN 1ELSE 0END = 1;
In pratica, stai dicendo al database: "considera solo le righe per cui questa logica complessa restituisce 1".
Teoricamente, lo standard SQL non impone un limite rigido al numero di WHEN. Nella realtà, però, una query con decine di condizioni diventa un incubo da leggere, manutenere e ottimizzare.
Se ti trovi a scrivere un CASE che non finisce più, prendilo come un campanello d'allarme. Probabilmente c'è un modo più intelligente di risolvere il problema, magari usando una lookup table (una tabella di mappatura) per rendere la query più pulita ed efficiente.
Qui bisogna fare attenzione. I valori NULL in SQL sono speciali. Una condizione come WHEN Colonna = NULL non funzionerà mai come ti aspetti, perché in SQL NULL non è uguale a nient'altro, nemmeno a sé stesso. Per verificare se un valore è NULL, la sintassi corretta è sempre WHEN Colonna IS NULL.
In questi casi, la clausola ELSE diventa la tua migliore amica. Ti permette di gestire in modo pulito e prevedibile tutti i casi non coperti dai WHEN, inclusi i NULL. Usala per assegnare un valore di default ed eviterai di trovarti con risultati inaspettati nelle tue analisi.