30712


タイトルの通りなのですが、SUMで集計して結果がNULLの場合に「無」のように文字で結果を表示するようにしたいものの、処理がうまくできません。  
今は  
SELECT  
SUM(CASE WHEN A THEN 1 ELSE NULL END)  
としているため、ヒットしないところはNULLとなり空欄になっています。

↑のNULLのところを文字で置換してみたり、COALESCEやISNULLを使ってもみたのですが、どうにもうまくできませんでした。

どなたかご教授頂けると幸いです。  
よろしくお願いします。


CC BY-SA 3.0
2016-11-27T04:45:59.383
30710
2016-11-27T05:41:06.687
19727
question
sql postgresql
SQLのSELECT SUM（CASE WHEN ～ ELSE NULL END） でNULLを文字にするやり方について


bool型の列に対して、trueとなっている行をカウントしたい、という話でしょうか。

SUMの結果をCOALESCEに通せばいいとは思いますが、COALESCEに渡す値の型を揃えないといけません。というか揃えられてしまいます。例えば次のSQLではSUMの結果は
int なので、`'無'` も int に変換しようとします…が、できないのでエラーになります。

[code]

    SELECT COALESCE(SUM(CASE WHEN A THEN 1 ELSE NULL END), '無')
    -- ERROR: invalid input syntax for integer: "無"
    
[/code]

ですから、SUMの方を明示的に文字列に変換しなければなりません。SQLで型変換を行う際には `CAST( value AS type )` とします。

[code]

    SELECT COALESCE(CAST(SUM(CASE WHEN A THEN 1 ELSE NULL END) AS text), '無')
    
[/code]

PostgreSQLの場合、こういう書き方もできます。

[code]

    SELECT COALESCE(SUM(CASE WHEN A THEN 1 ELSE NULL END)::text, '無')
    
[/code]


CC BY-SA 3.0
2016-11-27T05:41:06.687
30712
2016-11-27T05:41:06.687
8000
30710
answer