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

Javascript SQLLite-SUM返回null而不是0(零)值,javascript,sqlite,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 '"

我有一个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。 我想我可以使用
然后使用1 ELSE 0 END解决它,但它不起作用

我如何解决它,请得到结果为零,而不是空


谢谢你的帮助

我认为,如果您的一些初始值为null,那么case/else也不起作用(null既不等于也不等于任何值)。请尝试使用IFNULL为null设置一些默认的空白类型值

...
  " SUM(CASE WHEN IFNULL(dc.call_result,some_default_value) = '"+CALL_RESULT_STATE_APPT+"' THEN 1 ELSE 0 END) AS '"+APPT_CNT+"', "+
...

SUM在没有任何值作为开头时返回NULL,即WHERE子句不匹配任何行时

如果可以接受结果为浮点数,请将SUM替换为。 否则,可以在整个总和周围放置一个IFNULL:

SELECT ... IFNULL(SUM(CASE ... END), 0) FROM ...

只是问问而已,但是。。您是如何处理查询的?只是想知道用javascript创建一个查询是否足够安全,客户端可以很容易地对其进行操作,从而产生一个易于操作的注入。是Cordova移动应用程序吗?哦,从来没有听说过。无论如何,也许在描述中加上这一点,有人肯定可以帮助你,知道你正在使用这样一个框架,通过javascript本身创建sql查询通常是不安全的;WHEN子句中的null被解释为false。