将项目日期范围拆分为SQL中所有项目的工作周数

时间:2016-06-16 15:55:34

标签: sql sql-server-2008 tsql

我有一个带有total_hours列和startdate,enddate列的项目表。 如果项目的日期范围为5周,我需要一个查询,在所有项目的计算字段中返回5行,并增加工作周数。

这是我的表格数据,其中的查询显示了工作周格式的范围。

drop table #temp


CREATE TABLE #Temp
    (ProjectID int, Total_Hours int, StartDate datetime, EndDate datetime)
;

INSERT INTO #Temp
    (ProjectID, Total_Hours, StartDate, EndDate)
VALUES
    (645, 555, '2016-01-01 00:00:00', '2016-02-01 00:00:00'),
    (700, 234, '2015-01-14 00:00:00', '2016-02-01 00:00:00')



    Select datepart(week,startdate),datepart(week,Enddate) from #Temp

我需要一个返回以下值的查询

ProjectID   WW
645         1
645         2
645         3
645         4
645         5
645         6
700         3
700         4
700         5
700         6

我觉得我应该使用递归但不知道如何。

2 个答案:

答案 0 :(得分:1)

你可以用递归来做,但数字表通常更有效:

with n as (
      select row_number() over (order by (select null)) - 1 as n
      from master.spt_values
     )
select t.projectid, dateadd(week, n.n, t.startdate) as ww
from #Temp t join
     n
     on dateadd(week, n.n, t.startdate) <= t.enddate;

答案 1 :(得分:1)

如果您更喜欢递归查询,请使用

with t as (
 select projectid,datepart(week,startdate) sw,datepart(week,enddate) ew from #Temp
 union all
 select projectid,sw+1,ew from t where sw < ew
     )
select projectid, sw 
from t 
order by 1,2

Sample Demo