Articles

Istruzione SQL CASE-Forme semplici e ricercate

Lo scopo principale di un’espressione SQL CASE restituisce un valore basato su uno o più test condizionali. Espressioni di casi d’uso in qualsiasi punto di un’espressione di istruzione SQL è consentito. Anche se veramente un “espressione, alcune persone si riferiscono a loro come” dichiarazioni CASO.”Questo molto probabilmente deriva dal loro uso nei linguaggi di programmazione.

L’espressione SQL CASE è estremamente versatile e utilizzata in tutte le query SqlServer. In particolare viene utilizzato nelle clausole SELECT column list, GROUP BY, HAVING e ORDER BY. L’espressione CASE inoltre standardizza (abbellisce) i dati o esegue controlli per proteggere da errori, come dividere per zero.

Tutti gli esempi di questa lezione sono basati su Microsoft SQL Server Management Studio e il database AdventureWorks2012. Guida introduttiva all’utilizzo di SQL Server utilizzo di my free guide e strumenti Microsoft gratuiti.

SQL Server CASE Statement

Esistono due forme per la clausola CASE: semplice e cercato. Entrambe le forme restituiscono un risultato basato sul test di un’espressione. Anche se tecnicamente espressioni, vedrete molte persone si riferiscono ad esso come una dichiarazione.

La semplice istruzione SQL CASE viene utilizzata per i test di uguaglianza. Verifica un’espressione contro più valori, questo lo rende ideale per trasformare un insieme di valori, come le abbreviazioni nella loro forma lunga corrispondente.

L’istruzione SQL CASE ricercata utilizza un formato di valutazione delle espressioni più completo. È buono quando si desidera lavorare con intervalli di dati, come intervalli di stipendio o età.

Per prima cosa iniziamo con il modulo semplice, quindi copriamo la ricerca.

CASE expression Simple Form

La forma semplice dell’espressione CASE confronta i risultati di un’espressione con una serie di test e restituisce un “risultato” quando il “test” restituisce true.

La forma generale per una semplice espressione CASE form è:

CASE expression
WHEN test THEN result

ELSE otherResult
END

L’istruzione ELSE è facoltativa in un’espressione CASE. Restituisce “otherResult” quando non vengono effettuate corrispondenze e ELSE è presente. Se non c’è altro nell’istruzione CASE, restituisce NULL.

La clausola ELSE è un ottimo modo per catturare valori di dati errati o imprevisti e restituire un risultato diverso da NULL.

Esempio di trasformazione dei dati

Esistono diversi motivi per utilizzare un’istruzione CASE. Il primo è trasformare i dati da un insieme di valori a un altro. Ad esempio, per visualizzare il sesso di un dipendente come “Maschio” o “Femmina”, quando i dati sono codificati come “M” o “F”, utilizzare un’espressione CASO per verificare la rappresentazione del singolo carattere e restituire la sua forma lunga corrispondente.

L’esempio per questo è:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

Esempio di standardizzazione dei dati

Allo stesso modo è possibile utilizzare una semplice clausola CASE per standardizzare diversi valori in uno. Estendere il nostro esempio mappa diverse varianti a Maschio o femmina:

Potresti chiederti se potresti semplicemente creare un’altra tabella nel tuo database e usarla per cercare i valori. Tenderei ad essere d’accordo che sarebbe il migliore, ma in molte situazioni non avrai il permesso di creare tabelle nel database. In questo caso sei lasciato al tuo ingegno fornisce una dichiarazione SELECT.

Sommario

Ecco alcune cose da considerare quando si utilizza l’espressione CASO semplice:

  • Consente solo confronti di uguaglianza.
  • Valuta i test vengono valutati nell’ordine definito.
  • Restituisce il risultato corrispondente al primo test VERO.
  • Se non viene effettuata alcuna corrispondenza, case restituisce NULL a meno che non sia presente ALTRO.

CASE expression Searched Form

Il modulo di ricerca dell’espressione CASE consente test più versatili. Usalo per valutare una gamma più ampia di test. In effetti, qualsiasi espressione booleana si qualifica come test.

Un’espressione cercata da CASE ha questo formato

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

Con il modulo cercato, usa le clausole WHEN per valutare le espressioni booleane. Viene restituito il risultato della prima VERA espressione booleana.

Di seguito è riportato il modulo del caso cercato dell’esempio di genere dipendente dalla sezione precedente.

Abbiamo anche usato questo stesso esempio per la semplice istruzione SQL case. L’ho fatto per farti vedere la sottile differenza. Si noti che ogni clausola WHEN ora contiene il test come espressione booleana.

Confronto dei Semplici e Ricercate Forme di SQL CASO

Ecco le dichiarazioni side-by-side:

Semplice contro Cercato espressione CASE

io tendo ad usare cercati CASO il formato di espressioni in tutta la mia SQL. Questo motivo è semplice, devo solo ricordare un formato!

Poiché stiamo testando le espressioni booleane, l’istruzione CASE ricercata non si limita ai soli test di uguaglianza. Questo rende questa forma davvero buona per confrontare intervalli di valori. Forse il responsabile delle vendite di Adventure Works vuole organizzare i prodotti per fascia di prezzo. Come potrebbe essere fatto con SQL?

Dati i seguenti nomi e intervalli forniti dal responsabile vendite, possiamo costruire un’espressione CASO per confrontare il ListPrice con un intervallo di valori e quindi restituire il nome dell’intervallo di prezzo appropriato.

L’istruzione case viene inserita nell’elenco SELECT column e restituisce un valore di carattere. Ecco l’SQL che fa il trucco:

Quando si esegue questa query vedrai PriceRange elencate e la visualizzazione di valori in base agli intervalli specificati nel CASO di espressione:

CASO di Dichiarazione Risultati

CASO di dichiarazioni possono essere utilizzati anche per aiutare a prevenire gli errori. Un buon esempio è quello di verificare i valori validi all’interno di espressioni come quando si dividono i numeri.

Considera

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

Questa istruzione restituisce il messaggio

Divide by zero error encountered.

Usando una clausola CASE possiamo assicurarci di non dividere inavvertitamente per zero.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

Un’espressione CASE può essere utilizzata ovunque un’espressione possa essere utilizzata. Ciò significa che è possibile utilizzarlo per restituire un risultato di valore di colonna o addirittura utilizzarlo in una clausola ORDER BY.

Nella sezione seguente esploreremo l’utilizzo di CASE nelle clausole ORDER BY e GROUP BY.

Espressione DEL CASO in ORDINE PER

Continuando con la richiesta del responsabile vendite, supponiamo che desideri anche vedere i prodotti ordinati per fascia di prezzo e quindi nome del prodotto. Abbiamo visto come possiamo visualizzare le fasce di prezzo come una colonna, ma come possiamo ordinare?

In realtà è abbastanza facile. Poiché CASE è un’espressione, possiamo usarlo come una volta dei valori da cui ordinare i risultati. Ricorda, non ci limitiamo a ordinare solo le colonne della tabella, possiamo anche ordinare un’espressione.

Ecco la query per ordinare in base alla fascia di prezzo.

Possiamo quindi aggiungere l’istruzione CASE per SELEZIONARE l’elenco per visualizzare anche la fascia di prezzo.

Come puoi vedere, le cose iniziano a complicarsi. Vedi come viene ripetuta l’istruzione CASE sia nell’elenco SELECT che in ORDER BY? Fortunatamente, possiamo semplificare un po’, ma rimuovendo l’istruzione CASE dall’ORDINE e sostituendola con il nome alias dell’espressione CASE SELECT list PriceRange come così:

Espressione CASE in GROUP BY

Ora che abbiamo dato al responsabile vendite un elenco dettagliato che vuole vedere i dati di riepilogo – non finisce mai? Nella mia esperienza non è così, quindi conoscere un sacco di SQL per soddisfare le richieste dei clienti è la chiave del successo.

Ad ogni modo, la buona notizia è che possiamo usare l’espressione del CASO che abbiamo creato per creare gruppi di riepilogo. Nel seguente SQL stiamo raggruppando i dati per PriceRange. Vengono create statistiche di riepilogo sul prezzo di listino minimo, massimo e medio.

A differenza della clausola ORDER BY, non possiamo fare riferimento alla colonna alias PriceRange nel GRUPPO BY. L’intera espressione del CASO deve essere ripetuta. Ecco i risultati della nostra query:

Results – CASE Expression in GROUP BY

Wrap Up

Come puoi vedere, l’uso delle espressioni CASE aggiunge versatilità alle tue istruzioni SQL. Non solo consentono di trasformare i dati da un set di valori a un altro, ma possono anche essere utilizzati per garantire che le istruzioni non restituiscano errori.

Tra le due forme, semplici e ricercate, tendo ad usare il modulo di ricerca. Il motivo è che la forma semplice è limitata ai test di uguaglianza; mentre, la forma cercata può fare questo e altro ancora.

Poiché le espressioni di CASO sono espressioni e non dichiarazioni o clausole, possono essere utilizzate dove viene utilizzata qualsiasi altra espressione. Ciò significa che è possibile utilizzare in tutta l’istruzione SELECT e altrove in SQL.