2014-12-15 11 views
37

I mają następujące zapytanieStosując COALESCE do obsługi wartości NULL 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; 

Powyższe zapytanie Zwraca o/s, jak przedstawiono w załączonym obrazu enter image description here

jednak, że aby zastąpić wszystkich wartości zerowe 0 przez użycie COALESCE Proszę dać mi znać, jak można to osiągnąć w powyższym zapytaniu SELECT

Teraz dalej zmodyfikowałem zapytanie sing zlewają jak poniżej

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 

, w wyniku którego jest dołączony w obrazie 2.

nadal odbierać jeden wiersz z pustymi wartościami

+2

Czy próbowałeś zastąpić wartości zerowe zerami za pomocą 'COALESCE'? Co dokładnie poszło nie tak? –

+0

Nie, nie próbowałem, pokaż mi, używając koalescencji – ronan

+3

Następnie spróbuj funkcji coalesce() i zgłoś wszelkie problemy z nią związane. Przeczytaj instrukcję, jeśli nie masz pewności, jak jej użyć: http://www.postgresql.org/docs/current/static/functions-conditional.html#FUNCTIONS-COALESCE-NVL-IFNULL - "* Nie, nie mam wypróbowany * "nie działa w ten sposób SO. –

Odpowiedz

87

można używać w połączeniu z COALESCENULLIF dla krótkiego, wydajnego rozwiązania:

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

The NULLIF function zwróci null, jeśli yourField jest równa drugiej wartości ('' w tym przypadku), dzięki funkcji COALESCE pełni funkcjonalny we wszystkich przypadkach:

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

@ronan - ta odpowiedź jest poprawna i powszechnie akceptowane rozwiązanie, myślę, że powinieneś zaakceptować to. –

2

Jeśli używasz 0 i pusty ciąg '' i null do oznaczenia niezdefiniowanego masz problem z danymi. Po prostu zaktualizuj kolumny i napraw swój schemat.

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 = ''; 

Spowoduje to, że łączenie i selekcja będą znacznie łatwiejsze do przodu.

Powiązane problemy