我对这个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并计算两个日期之间的假期?
答案 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