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

SQL Server查询求助:按案件统计展示所有用户(含无未结案件用户)

解决SQL Server统计用户未结案件数的问题

嘿,刚接触SQL Server遇到这种问题太正常啦,我来帮你搞定它!

首先看你的需求:要统计所有用户的未结案件数量,哪怕是没有未结案件的用户也要显示出来,但你写的查询只返回了有未结案件的用户,问题出在这几个地方:

原查询的问题

你的原代码:

select user_name,isnull(count(CASE_ID),'0') as case_id from users where CLOSE_DATE is NULL group by user_name
  1. 用了WHERE CLOSE_DATE IS NULL,直接把已经结案的用户(比如User_ID=1的abc)过滤掉了,这些用户根本没进入分组统计,自然不会出现在结果里
  2. count(CASE_ID)是数字类型,ISNULL的第二个参数用字符串'0'没必要,用数字0就好,不过这不是导致结果缺失的关键

修正后的正确查询

我们需要换个思路:不要过滤数据,而是在统计的时候判断案件是否未结,这样所有用户都会被包含进来。有两种常用写法:

方法1:用COUNT结合CASE表达式

SELECT 
    User_Id,
    User_Name,
    COUNT(CASE WHEN Close_date IS NULL THEN Case_Id END) AS Case_Count
FROM users
GROUP BY User_Id, User_Name

方法2:用SUM结合CASE表达式

SELECT 
    User_Id,
    User_Name,
    SUM(CASE WHEN Close_date IS NULL THEN 1 ELSE 0 END) AS Case_Count
FROM users
GROUP BY User_Id, User_Name

为什么这样能得到正确结果?

  • 去掉WHERE条件后,所有用户的记录都会被纳入分组计算
  • 对于每个用户的案件:
    • 如果Close_date是NULL(未结案),CASE会返回有效内容(Case_Id或者1),会被COUNT/SUM统计进去
    • 如果Close_date不为NULL(已结案),CASE会返回NULL(COUNT会忽略)或者0(SUM会累加0),最终统计结果就是0
  • 这样不管用户有没有未结案件,都会出现在结果里啦

验证后的输出

执行上面的查询,就能得到你想要的结果:

User_ID   User_Name  Case_Count
1            abc       0
2            xyz       1
3            gst       1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:13