我有員工在數據庫中有合同。我想知道員工是否是某個地點的新員工。我有以下數據結構:確定員工是新員工還是離職員工
EmployeeId Index BeginDate Enddate HoursToWork LocationId
12133 1 2013-01-01 2014-01-01 10 1
12133 2 2013-06-01 2014-01-01 20 1
12133 3 2012-01-01 2014-01-01 5 1
正如你所看到的,員工可以對一個位置超過1周的合同。那麼Endate可以爲null。
每個位置和每月或每季度我想查看有多少員工已啓動。我想爲我想要的數據使用@Startdate和@Enddate參數。
我應該考慮很多情況。一樣,索引字段並不總是一起BEGINDATE增加,就像你可以看到指數= 3
例子:
我想知道有多少員工在2013年一月
啓動在這種情況下,沒有什麼因爲第一份合同在2012年1月1日開始。有兩個新合同,但該員工對該位置不是新手。但如果索引3不存在,那麼whis應該是一個新員工。
可能員工有兩份合同在同一天開始,如果他沒有合同,那麼它是1名新員工。
我已經嘗試了以下方法,當員工只有1份合同時,該方法起作用。但是,如果有超過1周的合同那麼就很難確定,如果員工是新的:
declare @Startdate datetime set @Startdate = '2013-01-01'
declare @Enddate datetime set @Enddate = '2013-12-31'
select EmployeeId, Index, BeginDate, Enddate, HoursToWork, LocationId
,(case
when BeginDate between @Startdate and @Enddate then 1
end) as NewEmployee
,(case
when Enddate between @Startdate and @Enddate then 1
end) as LeavingEmployee
from Contracts
鑑於3條記錄,該員工是不是一個新員工。我想有這樣一個輸出:
LocationId NewEmployee
1 0
當我剛剛有第2條記錄,我想知道在Janury 2013名新員工,然後我想到:
LocationId NewEmployee
1 1
所以,無論如何,你將不得不使用上'BeginDate'一個'Min'(或等價的東西)。現在離職員工,你不介意他們在第一個合同之後是否有另一份合同?你可以用你的3行顯示你想要檢索的信息嗎? –
@RaphaëlAlthaus查看編輯,所需的輸出。 – Amedo