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
Join

Newsletter

Nessuno spam, solo articoli interessanti ;)

Focus

Post correlati

sharding

Cosa è il database sharding?

Introduzione Ogni applicazione che utilizza un database deve pensare a come gestire un aumento delle richieste e dell’utilizzo di questa ultima senza comprometterne l’usabilità. Rendere

WITH – Common Table Expression

Le Common Table Expression forniscono una sintassi alternativa per evitare l’accumularsi di query innestate: permettono di creare delle tabelle temporanee basandosi sui risultati di una

Utilizzare la clausola ROLLUP

Talvolta voglio eseguire una query che mi fornisca dei risultati aggregati di media, min, max… ma anche dei risultati sull’intero rowset senza aggregazione. Per avere

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 ;)