我有一个问题要解决。这是怎么回事...
员工休假或休假,此条目记录在包含LEAVE_START_DATE
和NO_OF_DAYS
(即工作日数)的表中。
主表包含 DATE
、 IS_WEEK_DAY
(是/否)、IS_HOLIDAY
(是/否) 和 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
我一定过于简单化了 - 您是否要求从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]
下面的查询将从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