Il comando COALESCE

Il comando COALESCE (Standard ANSI, SQL-92 compatibile) è un comando estremamente comodo che valuta gli argomenti seguendo l’ordine e restituisce il valore corrente della prima espressione che inizialmente non restituisce NULL.

COALESCE ( expression [ ,...n ] )

L’espressione COALESCE è una scorciatoia sintattica dell’espressione CASE. Il codice di COALESCE(expression1,...n) viene quindi riscritto da Query Optimizer come la seguente espressione CASE:

CASE
  WHEN (expression1 IS NOT NULL) THEN expression1
  WHEN (expression2 IS NOT NULL) THEN expression2
  ...
ELSE expressionN
END

Ciò significa che i valori di input (expression1, expression2, expressionN e via di seguito) saranno valutati più volte. Inoltre, in conformità con lo standard SQL, un’espressione di valori che contiene una sottoquery è considerata non deterministica e la sottoquery viene valutata due volte. In entrambi i casi, è possibile che tra la prima valutazione e quelle successive i risultati siano diversi.

Esempi

Esempio 1

Nell’esempio seguente viene illustrato il modo in cui COALESCE seleziona i dati dalla prima colonna in cui è presente un valore non Null.

SELECT Name, COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Product;

Esempio 2

COALESCE può essere utilizzato per eseguire query leggermente più complesse come la seguente: ho una tabella pagamenti che include tre colonne con informazioni sulla retribuzione annua dei dipendenti, ovvero retribuzione oraria, stipendio e commissione. Un dipendente tuttavia riceve un solo tipo di paga, gli altri due valori saranno impostati correttamente a NULL.
Per determinare l’importo totale pagato a tutti i dipendenti, utilizzare la funzione COALESCE per ottenere solo i valori non NULL delle colonne paga_oraria, salario e commissione.

idpaga_orariasalariocommissionenumero_vendite
110NULLNULLNULL
2NULL10000NULLNULL
3NULLNULL150003
SELECT CAST(COALESCE(paga_oraria * 40 * 52, salario,
commissione * numero_vendite) AS money) AS 'Salario emesso' FROM pagamenti;

Ottengo quindi il seguente output (solo prima colonna)

Salario emesso Spiegazione
20800,00->10 * 40 * 52
10000,00->10000
45000,00->15000 * 3

Indice

Share
Ultimi articoli

Codice Pragmatico

Contatti

Per informazioni, dubbi o consulenze non esitate a contattarmi.

Lascia un messaggio

Ricevi le ultime news

Iscrivi alla newsletter

Solo articoli interessanti, promesso ;)