2013-11-27 77 views
-1

我需要一種將月份的工作日與日曆生成器的特定日期相關聯的方法。我能夠正確地生成日曆,但無法讓工作日填充。計算工作日並將其與每月的日期相關聯

例如,如果01/01/1999是星期六,則第一個工作日是01/04/1999,下一個工作日是01/05/1999。所以我的桌子需要看起來像這樣

Date    Business Date  BusinessDay BusinessDaysRemaining 
01/01/1999   01/04/1999    1     19 
01/02/1999   01/04/1999    1     19 
01/03/1999   01/04/1999    1     19 
01/04/1999   01/04/1999    1     19 
01/05/1999   01/05/1999    2     18 
01/06/1999   01/06/1999    3     17 
Etc... 

然後這將在下個月重新開始。在其他幾個月(和週末),商業日期可以追溯到週末前的星期五,這只是我想要實現的一個例子。

我不知道從哪裏開始,所以任何幫助將不勝感激。

這是在MS SQL 2008 R2

+1

你使用哪個DBMS? – Christos

+0

MS SQL 2008 V2。我在我的問題中也加了這個。 –

+1

我認爲投票結束這個問題是沒有道理的。如果結束了,我希望其他人會和我一起重新開放它。 –

回答

0

對於這個答案,我創建了一個名爲Calendar的表。主鍵是TheDate數據類型日期。其他字段爲HolidayName(可空值varchar),BusinessDayOfMonth tinyint默認爲0,BusinessDaysRemainingInMonth tinyint默認爲0.然後我輸入了2013年12月的記錄,其中有兩個節假日 - 聖誕節和節禮日。

這是我的更新。

update Calendar 
set BusinessDayOfMonth = therank 
from Calendar join 
(
select TheDate 
, rank() over 
(partition by cast(datepart(year, thedate) as varchar) + cast(datepart(month, thedate) 
as varchar) 
order by thedate) therank 

from Calendar 
where HolidayName is null 
and DATEPART(dw,thedate) between 2 and 6 -- Monday to Friday 
) temp on Calendar.TheDate = temp.TheDate 


declare @BusinessDays as tinyint 
set @BusinessDays = 
(select count(1) BusinessDays 
from Calendar 
where BusinessDayOfMonth > 0 
) 

update Calendar 
set BusinessDaysRemainingInMonth = @BusinessDays - BusinessDayOfMonth 
where BusinessDayOfMonth > 0 

就你而言,你將需要一個日期範圍當然。另外,您將不得不爲週末和假日更新BusinessDaysRemainingInMonth字段。如果你需要幫助,我建議一個單獨的問題。

+0

我不得不做一些小的修改,但這確實奏效。謝謝丹! –