2012-06-16 2 views
0

У меня есть проблема с решением. Вот как это делается ...Составить список вакансий/оставить даты

Сотрудник отправляется в отпуск или в отпуске, и эта запись заносится в таблицу с LEAVE_START_DATE и NO_OF_DAYS (что является числом рабочих дней).

Мастер таблица содержит DATE, IS_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

Я попытался использовать рекурсивный подход WITH(), но туда не попал. Решение необходимо заполнить таблицу в процессе ETL в SSIS. – Sarang

ответ

0

Я должен быть упрощаю - вы спрашиваете ли выбрать 3-х дней от table days (который уже заселенной), что соответствует параметры даты начала и рабочих дней? Если да, то ниже будет работать. Кроме того, вы не показываете, какую версию SQL SERVER, так что если до 2005 года вам придется работать с parameterized TOP с ROWCOUNT или любым другим, что вы предпочитаете.

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 или любую версию ниже, что вам нужно изменить последний верхний запрос с где положение, чтобы ограничить число строк

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 
Смежные вопросы