我有这个SQL查询:
var sqlQuery =
"SELECT '"+dateRanges[ic].DATE_FROM+"' as DATE_FROM, "+
" '"+dateRanges[ic].DATE_TO+"' as DATE_TO, "+
" COUNT(*) AS DIALS_CNT, "+
" SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_APPT+"' THEN 1 ELSE 0 END) AS '"+APPT_CNT+"', "+
" SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_CONV_NO_APPT+"' THEN 1 ELSE 0 END) AS '"+CONVERS_CNT+"' , "+
" SUM(CASE WHEN dc.call_result = '"+CALL_RESULT_STATE_CANNOT_REACH+"' THEN 1 ELSE 0 END) AS '"+CANNOT_REACH_CNT+"' "+
" FROM "+DIALED_CALLS_TABLE+" dc "+
" WHERE dc.date BETWEEN '"+dateRanges[ic].DATE_FROM+"' AND '"+dateRanges[ic].DATE_TO+"';";
问题是如果值的总和为零,则结果包含值null。
我认为我可以使用THEN 1 ELSE 0 END
解决它,但它无效。
我如何解决它,请用零而不是空来获得结果?
感谢您的帮助。
答案 0 :(得分:0)
当SUM没有得到任何值时,SUM返回NULL,即WHERE子句与任何行都不匹配时。
如果您可以将结果作为浮点数,请将SUM替换为TOTAL。 否则,您可以在整个总和周围放置一个IFNULL:
SELECT ... IFNULL(SUM(CASE ... END), 0) FROM ...
答案 1 :(得分:-1)
我认为如果你的某些initiall值为null,即使case / else也没有工作(null既不等于也不等于任何东西)。尝试使用IFNULL为空值设置一些默认的空白类型值。
...
" SUM(CASE WHEN IFNULL(dc.call_result,some_default_value) = '"+CALL_RESULT_STATE_APPT+"' THEN 1 ELSE 0 END) AS '"+APPT_CNT+"', "+
...