2014-12-15 10 views
37

ho la seguente queryUtilizzando COALESCE per gestire i valori NULL in PostgreSQL

SELECT DISTINCT 
    pt.incentive_marketing, 
    pt.incentive_channel, 
    pt.incentive_advertising 
FROM test.pricing pt 
WHERE pt.contract_id = 90000 
group by 1,2,3 
order by pt.incentive_marketing; 

La query precedente restituisce l'O/P, come mostrato nell'immagine allegata enter image description here

Tuttavia voglio sostituire tutti valori nulli di 0 utilizzando COALESCE Per favore fatemi sapere come questo può essere raggiunto in sopra SELEZIONA query

Ora ho ulteriormente modificato la query u cantare coalescenza come sotto

SELECT 
    COALESCE(pt.incentive_marketing, '0'), 
    COALESCE(pt.incentive_channel,'0'), 
    COALESCE(pt.incentive_advertising,'0') 
FROM test.pricing pt 
WHERE pt.contract_id = 90000 
group by 1,2,3 

il cui risultato è che solidale nell'immagine 2.

ho ancora ricevere una riga con valori vuoti

+2

Hai provato a sostituire i valori nulli con zeri usando 'COALESCE'? Cosa è andato esattamente storto? –

+0

no Non ho provato, per favore mostrami usando coalesce – ronan

+3

Quindi prova la funzione coalesce() e segnala ogni problema che hai con esso. Leggi il manuale se non sei sicuro su come usarlo: http://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL - "* No non l'ho fatto provato * "non è il modo in cui SO funziona. –

risposta

87

È possibile utilizzare in combinazione con COALESCENULLIF per una soluzione breve ed efficiente:

COALESCE(NULLIF(yourField,'') , '0') 

The NULLIF function restituirà null se yourfield è uguale al secondo valore ('' in questo caso), rendendo la funzione COALESCE completamente funzionante su tutti i casi:

    QUERY      |    RESULT 
--------------------------------------------------------------------------------- 
SELECT COALESCE(NULLIF(null ,''),'0')  |     '0' 
SELECT COALESCE(NULLIF('' ,''),'0')  |     '0' 
SELECT COALESCE(NULLIF('foo' ,''),'0')  |     'foo' 
+3

@ronan - questa risposta è corretta e la soluzione ampiamente accettata, penso che dovresti accettarlo. –

2

Se stai usando 0 e una stringa vuota '' e null per designare undefined hai un problema con i dati. Basta aggiornare le colonne e correggere lo schema.

UPDATE pt.incentive_channel 
SET pt.incentive_marketing = NULL 
WHERE pt.incentive_marketing = ''; 

UPDATE pt.incentive_channel 
SET pt.incentive_advertising = NULL 
WHERE pt.incentive_marketing = ''; 

UPDATE pt.incentive_channel 
SET pt.incentive_channel = NULL 
WHERE pt.incentive_marketing = ''; 

Ciò renderà l'unione e la selezione sostanzialmente più semplice andare avanti.

Problemi correlati