首页 > 解决方案 > 如果不是所有行都存在,则来自不同表的 sql server 计数

问题描述

我试图从 2 个表中获取结果。第一个表是带有信息的 ID,来自第二个表我想根据某些条件计算第一个表中每个 id 的存在。这是我的代码:

SELECT p.stId, count(att.adate)
FROM payments p
LEFT JOIN Attendence att ON att.stId = p.stId
where p.cyear = 2018 and p.cmonth = 3 and p.cId = 10
and att.adate between '2018/03/01' and '2018/03/30 23:59:59.999' and att.cid 
= 10
GROUP BY p.stId

从第一个表(p)我有 3 个 ID。但是当我运行它时,它只返回 1 个 ID。第二个表(t)中不存在的 id 不会给出任何结果。我想要做的是,如果第二个表中没有 id,我想为计数返回 0 (count(att.adate))

谢谢。

标签: sqlsql-servercountmulti-table

解决方案


将右侧表格条件从WHERE移至ON以获得真实left join结果:

SELECT p.stId, count(att.adate)
FROM payments p
LEFT JOIN Attendence att ON att.stId = p.stId
and att.adate between '2018/03/01' and '2018/03/30 23:59:59.999' and att.cid 
= 10
where p.cyear = 2018 and p.cmonth = 3 and p.cId = 10
GROUP BY p.stId

(在 中时WHERE,您会得到常规inner join结果。)


推荐阅读