所以我有一张桌子,雇员。我希望显示员工在50,60和80部门工作的同一个月。这是我写的代码:
select to_char(hire_date, 'Month') as "Month Name"
from employees
where department_id = any (50, 60, 80);
但是,这显示了在三个部门雇用员工的所有月份:
Month Name
January
May
February
November
October
January
March
July
January
May
March
由于1月份出现在所有三个部门的同一个月,我只希望显示1月份。我该如何解决这个问题?
答案 0 :(得分:1)
您可以计算实际匹配的部门数量,这意味着您需要按月分组;然后筛选那些与您要查找的部门数相同的匹配数:
select to_char(hire_date, 'Month') as "Month Name"
from employees
where department_id = any (50, 60, 80)
group by to_char(hire_date, 'Month')
having count(distinct department_id) = 3;
Month Name
------------------------------------
January
February
May
那是在寻找任何一年的同一个月 - 我想这可能对看谁有周年纪念日有用。如果你真的想要同一个月,那么分组需要包括年份:
select to_char(trunc(hire_date, 'MM'), 'Month') as "Month Name"
from employees
where department_id = any (50, 60, 80)
group by trunc(hire_date, 'MM')
having count(distinct department_id) = 3;
Month Name
------------------------------------
February
这是标准HR模式的员工表;如果您一直在修改它,可能会有不同的数据。在这些数据中,有12人在其中一个部门中,任何二月的雇用日期; 1999年2月雇用了三人,每个部门雇用一人。