我有一个带有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
我觉得我应该使用递归但不知道如何。
答案 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