(SELECT AL.RULE_ID,WM_CONCAT(AL.CUSTNO) FROM AC_FIA.TC_CALL_AI AL WHERE AL.RULE_ID != NULL group by AL.RULE_ID) 为什么!=null就没有数据
时间: 2024-03-08 14:50:04 浏览: 23
在 SQL 中,使用 "!=" 或 "<>" 操作符来判断某个值是否不等于另一个值。然而,当使用 "!=" 或 "<>" 操作符时,如果比较的值中包含 NULL,结果可能会出现意外的行为,因为 NULL 表示未知的值,它既不等于任何非 NULL 值,也不等于 NULL 本身。因此,当比较一个值和 NULL 时,结果永远是 UNKNOWN,而不是 TRUE 或 FALSE。为了正确地检查一个值是否为 NULL,应该使用 "IS NULL" 或 "IS NOT NULL" 操作符。
在你提供的 SQL 语句中,"!=" 操作符被用来比较 "AL.RULE_ID" 和 NULL,这是不正确的做法。正确的做法是使用 "IS NOT NULL" 操作符来判断 "AL.RULE_ID" 是否为 NULL,例如:
```
SELECT AL.RULE_ID, WM_CONCAT(AL.CUSTNO)
FROM AC_FIA.TC_CALL_AI AL
WHERE AL.RULE_ID IS NOT NULL
GROUP BY AL.RULE_ID;
```
这样做就能够正确地筛选出 "AL.RULE_ID" 不为 NULL 的记录,并返回符合条件的结果集。
相关问题
select CALL.RULE_ID ruleId, WM_CONCAT(distinct CON.STAFFID) idGroup, SUM(CASE WHEN CALL.CALLSTATUS != '-2' THEN 1 ELSE 0 END) callCount, SUM(CASE WHEN CALL.CALLRESULT = '1' OR CALL.CALLRESULT = '2' THEN 1 ELSE 0 END) resultCount, SUM(CASE WHEN CALL.CALLSTATUS = '-1' THEN 1 ELSE 0 END) waitCallCount, SUM(CASE WHEN CON.CALLBACKSTATUS = '1' THEN 1 ELSE 0 END) addSuccessCount from AC_FIA.TC_CALL_AI CALL LEFT JOIN AC_FIA.TC_WE_CONTACT CON ON CON.RULE_ID = CALL.RULE_ID <where> <if test="query.employeeGroup != null and query.employeeGroup != ''"> AND CALL.RULE_ID = #{query.employeeGroup} </if> </where> group by CALL.RULE_ID,CON.RULE_ID
这是一个 SQL 查询语句,用于从 AC_FIA 数据库的 TC_CALL_AI 和 TC_WE_CONTACT 表中获取数据。查询中包含了规则 ID,员工 ID 组,通话数量,结果数量,等待通话数量和添加成功数量等信息。其中,WM_CONCAT(distinct CON.STAFFID) idGroup 是用于将多个员工 ID 组合为一个字符串。而 <where> 和 <if> 标签则是用于动态生成查询条件的。groupBy 用于对结果进行分组,按照规则 ID 和员工 ID 进行分组。
wmsys.wm_concat 和wm_concat有什么区别,是一个函数吗
wmsys.wm_concat 和 wm_concat 都是 Oracle 数据库中的函数,但它们是不同的函数,并且使用方法也不同。
- wm_concat 是一个非官方的 Oracle 函数,该函数可以将多行数据按照指定的分隔符合并成一行。但是,它并不是 Oracle 官方提供的函数,所以在某些情况下可能会出现问题。
- wmsys.wm_concat 是 Oracle 官方提供的函数,也可以将多行数据按照指定的分隔符合并成一行。它在 Oracle 11g R2 版本中被引入,但在 Oracle 12c 中被弃用,所以建议使用 LISTAGG 函数代替。
需要注意的是,在某些 Oracle 版本中,wmsys.wm_concat 函数可能没有授权给用户使用,这时需要向 DBA 请求授权。