1

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

4

1 回答 1

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
于 2012-12-10T14:21:29.923 回答