使用COUNT()和JOIN对条目进行总计时使用WHERE子句

时间:2012-12-10 14:20:22

标签: sql sql-server join count where-clause

我对这个MSSQL查询有点困惑,非常感谢你对此有所帮助!我想简单地计算一下特定时期内员工的假期数。

SELECT e.EMPLOYEE_ID, COUNT(y.EMPLOYEE_ID) AS TOTAL_HOLIDAYS FROM EMPLOYEE e 
LEFT OUTER JOIN
HOLIDAY y
ON e.EMPLOYEE_ID = y.EMPLOYEE_ID
WHERE e.IS_ACTIVE = 'true'
-- AND y.[DATE] BETWEEN '20121201' AND '20121210'
GROUP BY e.EMPLOYEE_ID

这种查询给了我我需要的东西,但我想在假期时添加一个过滤器...我必须以错误的方式进行此操作。我需要在数据集中列出所有员工 - 例如即使HOLIDAY表中没有任何内容,我也希望得到结果。

ID TOTAL_HOLIDAYS
1    0
2    0
etc. 

当我尝试添加注释行时(我知道这两个日期之间没有假期),则不返回任何行。如何重写此查询以始终列出所有活动的EMPLOYEE_ID并计算两个日期之间的假期?

1 个答案:

答案 0 :(得分:2)

将条件移动到连接中:

SELECT e.EMPLOYEE_ID, COUNT(y.EMPLOYEE_ID) AS TOTAL_HOLIDAYS
FROM EMPLOYEE e 
LEFT OUTER JOIN HOLIDAY y
ON e.EMPLOYEE_ID = y.EMPLOYEE_ID
AND y.[DATE] BETWEEN '20121201' AND '20121210'
WHERE e.IS_ACTIVE = 'true'
GROUP BY e.EMPLOYEE_ID