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

SQL Server如何查询显示所有级别含零值在内的计数结果集

问题原因

你现有写法的问题出在三处:

  • 对Counsnet关联表的过滤条件写在了HAVING子句中:LEFT JOIN无匹配时关联表的字段全部为NULL,会被HAVING的等值条件直接过滤,相当于把LEFT JOIN降级成了INNER JOIN,自然不会返回计数为0的级别
  • 统计计数用了COUNT(M.Id):主表Master_Levels的Id永远非空,就算没有关联匹配也不会返回0
  • GROUP BY中包含了关联表的字段,无匹配时的NULL值会生成无效分组,进一步干扰结果

修正后的SQL语句

SELECT 
    M.Desc AS LevelDescription, 
    COUNT(C.LevelId) AS Counts
FROM 
    Master_Levels M 
LEFT JOIN 
    Counsent C ON M.Id = C.LevelId
        AND C.IsAccepts = 'Yes'
        AND C.ProcedureId = 3
WHERE 
    M.Id IN (1, 2, 3, 4)
GROUP BY 
    M.Desc, M.Id

修正说明

  • 把关联表的过滤条件移到LEFT JOIN的ON子句中,仅关联符合要求的记录,无匹配时关联表字段返回NULL,不会过滤主表的级别数据
  • 计数改为统计关联表的C.LevelId,无匹配时该字段为NULL,COUNT会自动忽略NULL值,正确返回0计数
  • 去掉GROUP BY中关联表的冗余字段,仅按主表的级别维度分组,结果结构符合预期
  • 主表的Id过滤移到WHERE子句,提前过滤无效数据,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:09:04