2013-07-01 33 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

有点改变了答案 –