SQLite - SUM返回null而不是0(零)值

时间:2014-12-01 17:25:30

标签: javascript sqlite

我有这个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解决它,但它无效。

我如何解决它,请用零而不是空来获得结果?

感谢您的帮助。

2 个答案:

答案 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+"', "+
...