私は次のクエリを持っています
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;
上記のクエリは、添付の画像に示すようにo/pを返します
ただし、COALESCEを使用してすべてのヌル値を0に置き換えたい上記のSELECTクエリでこれを実現する方法を教えてください
次に、以下のように合体を使用してクエリをさらに変更しました
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
結果は画像2に添付されているとおりです。
私はまだ空の値を持つ1行を受け取ります
COALESCE
をNULLIF
と組み合わせて使用すると、短く効率的なソリューションを実現できます。
COALESCE( NULLIF(yourField,'') , '0' )
NULLIF
関数 は、yourFieldが2番目の値(この場合は''
)に等しい場合にnullを返し、COALESCE
関数がすべての場合に完全に機能するようにします。
QUERY | RESULT
---------------------------------------------------------------------------------
SELECT COALESCE(NULLIF(null ,''),'0') | '0'
SELECT COALESCE(NULLIF('' ,''),'0') | '0'
SELECT COALESCE(NULLIF('foo' ,''),'0') | 'foo'
0
と空の文字列''
およびnull
を使用して未定義を指定している場合、データの問題が発生しています。列を更新し、スキーマを修正するだけです。
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 = '';
これにより、参加と選択が大幅に簡単になります。