2017-06-14 14 views
0

我的表看起來像這樣:如何做一個複雜的,其中涉及到條款日期

Customer  Enrolled 
Emp1   01/01/2014 
Emp1   02/01/2014 
Emp1   03/01/2014 
Emp1   04/01/2014 
Emp1   05/01/2014 
. 
. 
. 
Emp1   12/01/2014 
Emp2   12/01/2015 

我必須確定,如果僱員被錄取爲整個年 - 即在2014年1月1日列中的所有行到12/01/2014。

我想過使用case語句,但我不確定最好的方法是什麼。

這是我當前的查詢:

select distinct EMPLOYEE from TABLE 
WHERE ENROLLED = '2014-01-01' AND ENROLLED = '2014-02-01' AND ENROLLED = '2014-03-01' 
AND ENROLLED = '2014-04-01' AND ENROLLED = '2014-05-01' AND ENROLLED = '2014-06-01' 
AND ENROLLED = '2014-07-01' AND ENROLLED = '2014-08-01' AND ENROLLED = '2014-09-01' 
AND ENROLLED = '2014-10-01' AND ENROLLED = '2014-11-01' AND ENROLLED = '2014-12-01' 

也許我只是看着它錯誤或過度複雜化了。

+0

你的where子句阻止了任何行被返回。單個值不能同時是所有這些日期。 –

回答

4

你可以做到這一點的,讓你的每一個這樣的客戶和每一財政年度結果的一般查詢:

select customer, year(enrolled) 
from table 
group by customer, year(enrolled) 
having count(distinct(enrolled))=12 

如果你有興趣只在某一年或一個特定的客戶,你可以添加一個where -condition,如where year(enrolled)=1024 and customer='emp1'

+0

這正是我正在尋找的 - 我甚至沒有想過使用年份功能 – lnjblue

2

試試這個 - 這會計算多少個月。

select count(Distinct(Enrolled)) from [TABLE] where Enrolled between '1-1-2014' and '12-1-2014' and Customer='Emp1' 
+2

仍然從我這裏得到+1,但要注意這些日期字符串。根據日期格式,他們不會返回預期的日期。更好的格式是ANSI標準YYYYDDMM。無論使用什麼日期格式,該格式都可以工作。 –