0

解決すべき問題があります。これがどうなるか...

従業員が休暇または休暇を取り、このエントリがLEAVE_START_DATEand NO_OF_DAYS(営業日数)とともにテーブルに記録されます。

マスターテーブルには、、DATEIS_WEEK_DAYY / 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
4

2 に答える 2

0

table days単純化しすぎているようですが、開始日と営業日のパラメーターに一致する (既に入力されている) 3 日を選択するよう求めていますか? その場合、以下が機能します。また、 のバージョンが表示されていないため、2005 年より前のバージョンの場合は、 withまたは好みのものを SQL SERVER回避する必要があります。parameterized TOPROWCOUNT

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]
于 2012-06-16T14:44:58.820 に答える
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
于 2012-06-16T14:50:07.057 に答える