Ich habe folgende Frage
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;
Die obige Abfrage gibt das Ergebnis wie im angehängten Bild wieder
Ich möchte jedoch alle Nullwerte mit COALESCE durch 0 ersetzen. Bitte lassen Sie mich wissen, wie dies in der obigen SELECT-Abfrage erreicht werden kann
Jetzt habe ich die Abfrage mithilfe von Coalesce wie folgt weiter modifiziert
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
das Ergebnis ist in Abbildung 2 dargestellt.
Ich erhalte immer noch eine Zeile mit leeren Werten
Sie können COALESCE
in Verbindung mit NULLIF
für eine kurze, effiziente Lösung verwenden:
COALESCE( NULLIF(yourField,'') , '0' )
Die Funktion NULLIF
gibt null zurück, wenn yourField dem zweiten Wert entspricht (''
in diesem Fall), wodurch die Funktion COALESCE
in allen Fällen vollständig funktioniert:
QUERY | RESULT
---------------------------------------------------------------------------------
SELECT COALESCE(NULLIF(null ,''),'0') | '0'
SELECT COALESCE(NULLIF('' ,''),'0') | '0'
SELECT COALESCE(NULLIF('foo' ,''),'0') | 'foo'
Wenn Sie mit 0
Und einer leeren Zeichenfolge ''
Und null
undefiniert angeben, liegt ein Datenproblem vor. Aktualisieren Sie einfach die Spalten und korrigieren Sie Ihr 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 = '';
Dies erleichtert das Zusammenfügen und Auswählen erheblich.