2013-05-28 148 views
0

我正在製作一個時間記錄程序,因爲人們有不同的時間模型(全職工作,兼職(例如只工作在星期一3小時和星期三5小時),我必須計算每天的基數。表我在我的腦海是:連續日期表

領域:

Workers_ID 
Date 
Weekday name 
Hours to work 
Hours worked 

既然大家都可以工作(工作時間)每天都在一年,我需要一個連續的日期條目(例如從01.01.2013 - 現在) OR從01.01.2013 - 01.01.2100左右。

但是,因爲我很新的SQL我不知道如何做到這一點。任何人都可以幫助我嗎?

+0

您能給與將要存儲在幾個履歷的一例這張桌子? –

+0

當然。 1,03-27-2013,星期一,8,7 1星期二,4,7等等。因此,我可以爲每週或每月或每年製作摘要,並可顯示加班等。 – ruedi

回答

1

不知道如果我理解正確,您所需要的,但在這裏是一種方式來獲得兩個日期之間的連續日期:

DECLARE @startDate DATETIME 
DECLARE @endDate DATETIME 

SET @startDate = '2013-01-01' 
SET @endDate = GETDATE() 


;WITH CTE_Dates AS 
(
    SELECT @startDate AS DT 
    UNION ALL 
    SELECT DATEADD(DD,1,DT) FROM CTE_Dates 
    WHERE DT <= @endDate 
) 
SELECT * FROM CTE_Dates 
OPTION (MAXRECURSION 0) 
+0

我從來沒有和CTE一起工作過,並且有一個問題。當我把你的代碼放入一個新的查詢中時,我不知道如何使用CTE_Dates表。例如。如果我在OPTION(MAXRECURSION 0)行之後寫入Select TOP 10 FROM CTE_Dates,則什麼都不會發生,並且我收到消息:「Msg 156,Level 15,State 1,Line 20 關鍵字'FROM'附近的語法錯誤。 – ruedi

+0

CTE像一個臨時視圖或像前面寫的子查詢一樣工作。它只對下一個語句有效,OPTION(MAXRECURSION 0)結束,所以你不能再使用它了。如果您需要多條語句中的CTE數據,請考慮使用#temp表來存儲來自CTE的日期 –

+0

關於CTE的一些鏈接:http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105) .aspx https://www.simple-talk.com/sql/t-sql-programming/sql-server-cte-basics/ –