同一列中多次出现的数值

时间:2016-11-11 14:53:52

标签: oracle-sqldeveloper

所以我有一张桌子,雇员。我希望显示员工在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月份。我该如何解决这个问题?

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月雇用了三人,每个部门雇用一人。