You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQL查询对无Completed状态的EmployeeID返回0而非统计值?

解决方法

首先纠正你原查询的语法错误:WHERE子句必须放在GROUP BY之前,原写法会触发语法报错。

要实现“所有EmployeeID都显示,无Completed记录时返回0”的需求,分两种场景处理:

场景1:所有需要统计的EmployeeID都在tbl1表中(即使没有Completed状态的记录)

用CASE表达式配合COUNT函数即可,COUNT会自动忽略NULL值:

SELECT 
    EmployeeID,
    COUNT(CASE WHEN Status = 'Completed' THEN 1 END) AS CompletedCount
FROM tbl1
GROUP BY EmployeeID;

当某EmployeeID没有Completed记录时,CASE返回NULL,COUNT不会统计这些NULL,最终结果就是0。

场景2:有单独的员工表(比如tblEmployees)存储所有EmployeeID(tbl1可能没有部分员工的记录)

此时需要用左连接+COALESCE函数把NULL转为0:

SELECT 
    e.EmployeeID,
    COALESCE(t.CompletedCount, 0) AS CompletedCount
FROM tblEmployees e
LEFT JOIN (
    -- 先统计有Completed记录的员工数量
    SELECT EmployeeID, COUNT(*) AS CompletedCount
    FROM tbl1
    WHERE Status = 'Completed'
    GROUP BY EmployeeID
) t ON e.EmployeeID = t.EmployeeID;

为什么原查询不行?

原查询的WHERE Status = 'Completed'会直接过滤掉所有非Completed的记录,导致没有Completed记录的EmployeeID根本不会出现在结果集中,自然无法返回0。

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:35:29