2016-11-11 20 views
1

所以我有一張表Employees。我想顯示在同一個月,當員工在部門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

您正在尋找一個月(忽略一年?),其中三個部門的人都被僱用了?示例數據和結果將會有所幫助。如果您正在查看月份和年份,使用標準HR模式員工表只有二月份匹配;如果你忽略了一年,1月,如果我已經理解了...... –

+0

如果你在問題中解釋得更清楚,並且修正了標題 - 爲什麼它指向不同的列? - 和標籤。 –

+0

是的,我只是在尋找一個月,這是一個瑣事的事情,「在哪個月50,60和80部門都僱用員工?」 – Tim

回答

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個人在任何一個2月份有聘用日期的部門; 1999年2月聘用了三名,每個部門都有一名。

+0

謝謝,這是我的工作! – Tim

相關問題