2013-07-01 76 views
-1

我們在數據庫中使用查找表來分組數週,數月和數年。可悲的是,創作它的人早已消失,日曆在今年年底結束!所以我真的需要找到一種加入它的方式!它的建立與下列:在sql中創建日曆

enter image description here

我不是很好的SQL(MS2008)要誠實和香港專業教育學院與它stuggeled,我們不能設置任何新的東西了因爲一切都圍繞這個建!

+0

你是說你可以不設置任何新的東西了,所以什麼是你想實現呢?您的表格已經在您的Excel表格中設置好了,它具有「無限」的行數;爲什麼不加入它?我真的不知道這個問題。 – Eric

+0

即時嘗試添加到數據庫中的當前表中,Excel可以很好地處理日期和那個,但它不適用於ID,它最終完全結束。 – GPH

+0

看起來像前兩行。將表格中的最後幾行添加到您的帖子中。 –

回答

1

你可以這樣做,但我不明白爲什麼你的日曆從三月份開始?

declare @Date_Start date, @Date_End date 

select @Date_Start = '20130101' 
select @Date_End = '20131231' 

;with 
CTE_Dates as (
    select @Date_Start as [Date] 
    union all 
    select dateadd(dd, 1, [Date]) 
    from CTE_Dates 
    where [Date] < @Date_End 
), 
CTE_Calendar as (
    select 
     [Date], 
     datename(dw, [Date]) as [Day], 
     datepart(ww, [Date]) as [Week], 
     datepart(mm, [Date]) as [MonthID], 
     dateadd(mm, datediff(mm, 0, getdate()), 0) as [Month], 
     datepart(yy, [Date]) as [YearID], 
     dateadd(yy, datediff(yy, 0, getdate()), 0) as [Year], 
     datepart(qq, [Date]) as [QuarterID], 
     dateadd(qq, datediff(qq, 0, getdate()), 0) as [Quarter] 
    from CTE_Dates 
) 
select 
    row_number() over (order by [Date]) + @Start_ID - 1 as ID, 
    * 
from CTE_Calendar 
option (maxrecursion 0) 

SQL FIDDLE EXAMPLE

+0

非常完美!至於行軍的事情,我也不知道!謝謝! – GPH

+0

關於我能做些什麼關於ID字段的想法?他們需要像幾週一樣增加。例如,當我在一年內打52周時,它仍然需要爲ID自動增加(新的一年中的第1周將是第53周) – GPH

+0

有點改變了答案 –