【发布时间】:2019-08-26 21:23:27
【问题描述】:
我有两张表employees 和 Medical leave,通过Employee ID 关联,基本上Medical leave 表会有一个员工多个休假的多个数据,我想按月份过滤掉数据病假,并将在过滤月份未发生病假的员工包含为空值。
EMPLOYEES MEDICAL
|employee|ID| |ID|DateOfLeave|
A 1 1 2019/1/3
B 2 1 2019/4/15
C 3 2 2019/5/16
D 4
我提出的 sql 语句过滤了休假的特定月份,并计算了他们在该月(例如 1 月)休假的次数,它还包括没有任何休假的员工为“0”,但是1月份没有病假的员工根本没有出现在结果集中,我如何才能显示他们在一月份有0个病假?
select employees.employee, employees.ID,
count(medical.DateOfLeave) as NumberOfLeaves
from employees
left outer join medical on employees.ID = medical.ID
where (MONTH(DateOfLeave) = 1) or (medical.DateOfLeave is null)
group by employees.employee,employees.ID
RESULT SET
|Employee|ID|NumberOfLeaves|
A 1 1
C 3 0
D 4 0
如您所见,B 消失了,但我希望它在结果集中显示为“0”,就像员工 C 和 D 一样
我知道这是因为员工 B 的医疗数据不符合 where 子句的条件,但是我如何编写一个语句,其中包含在结果集中没有出现在 1 月的病假为 0 的员工??
【问题讨论】:
标签: sql sql-server outer-join