2012-06-16 47 views
0

我有一個問題需要解決。在這裏它是怎麼回事...生成假期/假期列表

一名僱員休假或假期,並且這個條目被記錄在一張表中LEAVE_START_DATENO_OF_DAYS(這是工作日數)。

一個主表包含DATEIS_WEEK_DAY(Y/N),IS_HOLIDAY(Y/N),和DAY_OF_WEEK

需要生成員工休假日期的列表。


leaves

LEAVE_START_DATE, NO_OF_DAYS  
2012-05-17, 3 

days

DATE, IS_WEEK_DAY, IS_HOLIDAY, DAY_OF_WEEK 
2012-05-17, Y, N, 5 
2012-05-18, Y, N, 6 
2012-05-19, N, N, 7 
2012-05-20, N, N, 1 
2012-05-21, Y, Y, 2 
2012-05-22, Y, N, 3 

預期結果

DATE 
2012-05-17 
2012-05-18 
2012-05-22 
+0

那麼你已經靠自己有多遠了? –

+0

我嘗試過使用()遞歸方法,但沒有領先。在SSIS上進行ETL過程時,需要解決方案來填充表。 – Sarang

回答

0

我必須簡單化 - 你問到從table days(其中已填充)選擇3天即開始日期和工作日的參數相匹配?如果是這樣,下面的工作。此外,你沒有顯示SQL SERVER的版本,所以如果是在2005年之前,你將不得不用ROWCOUNT或任何你喜歡的東西來解決parameterized TOP

DECLARE @LeaveStartDate date, @noBusDays int 
SET @LeaveStartDate = '2012-05-17' 
SET @noBusDays = 3 

SELECT TOP (@noBusDays) [DATE] 
FROM [DAYS] 
WHERE IS_WEEK_DAY = 'Y' 
AND IS_HOLIDAY = 'N' 
AND [DATE] > = @LeaveStartDate 
ORDER BY [DATE] 
+0

謝謝!!! ......這個不知何故:) – Sarang

+0

太棒了!很高興它做到了。 – user1166147

0

下面的查詢會從SQL Server 2008起,否則,如果您使用2005或以下的任何版本,你需要有一個改變的最後一個頂級查詢的WHERE子句限制的行數工作

Declare @leaves table 
(Leave_Start_date datetime,No_Of_days int) 

insert into @leaves 
values ('2012-05-17',3) 

Declare @days table 
([Date] datetime, 
IS_WEEK_DAY char(1), 
IS_HOLIDAY char(1), 
Day_OF_THE_WEEK int) 

Insert into @days 
values 
('2012-05-17','Y','N',5), 
('2012-05-18','Y','N',6), 
('2012-05-19','N','N',7), 
('2012-05-20','N','N',1), 
('2012-05-21','Y','N',2) 

;with cte as 
(
    Select [date] from @days where [Date]>=(select Leave_Start_date from @leaves Limit1) 
    and is_WEEK_DAY='Y' and IS_HOLIDAY='N' 
) 
Select top (select no_of_days from @leaves) [date] from cte