生成假期/休假日期列表

时间:2012-06-16 14:05:31

标签: sql-server

我有一个问题需要解决。这是怎么回事......

员工休假或休假,此条目记录在包含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

2 个答案:

答案 0 :(得分:0)

我必须过于简单化 - 您是否要求从table days(已填充)中选择与开始日期和工作日参数相匹配的3天?如果是这样,以下将起作用。此外,您没有显示SQL SERVER的版本,因此,如果是在2005年之前,您将需要使用parameterized TOP或{1}}或其他任何方式解决问题。

ROWCOUNT

答案 1 :(得分: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