Sql server 如何使用有限的数据在两个不同日期之间创建数据

Sql server 如何使用有限的数据在两个不同日期之间创建数据,sql-server,Sql Server,我试图在两个不同的日期之间创建数据 表中的数据如下所示: StartDate | EndDate | StudId | Active -----------+---------------+-------------+----------- 01-01-2009 | 02-15-2009 | 12345 | Y 02-16-2009 | 03-15-2009 | 12345 | Y 03-16-2009

我试图在两个不同的日期之间创建数据

表中的数据如下所示:

StartDate  | EndDate       | StudId      | Active
-----------+---------------+-------------+-----------
01-01-2009 | 02-15-2009    |    12345    |       Y  
02-16-2009 | 03-15-2009    |    12345    |       Y  
03-16-2009 | 04-10-2009    |    12345    |       N  
04-11-2009 | 05-31-2009    |    12345    |       Y  
01-01-2009 | 02-15-2009    |    23642    |       Y  
02-16-2009 | 03-15-2009    |    23642    |       Y  
03-16-2009 | 04-10-2009    |    23642    |       N   
04-11-2009 | 05-31-2009    |    23642    |       Y  
Startdate   |  StudID  | Active
------------+----------+--------
01-01-2009  |  12345   |    Y
01-02-2009  |  12345   |    Y
01-03-2009  |  12345   |    Y
01-04-2009  |  12345   |    Y
  .               .         .
  .               .         .
02-15-2009  |  12345   |    Y
02-16-2009  |  12345   |    Y
表中的数据使用不同的开始日期、结束日期和StudID

我试图得到如下结果:

StartDate  | EndDate       | StudId      | Active
-----------+---------------+-------------+-----------
01-01-2009 | 02-15-2009    |    12345    |       Y  
02-16-2009 | 03-15-2009    |    12345    |       Y  
03-16-2009 | 04-10-2009    |    12345    |       N  
04-11-2009 | 05-31-2009    |    12345    |       Y  
01-01-2009 | 02-15-2009    |    23642    |       Y  
02-16-2009 | 03-15-2009    |    23642    |       Y  
03-16-2009 | 04-10-2009    |    23642    |       N   
04-11-2009 | 05-31-2009    |    23642    |       Y  
Startdate   |  StudID  | Active
------------+----------+--------
01-01-2009  |  12345   |    Y
01-02-2009  |  12345   |    Y
01-03-2009  |  12345   |    Y
01-04-2009  |  12345   |    Y
  .               .         .
  .               .         .
02-15-2009  |  12345   |    Y
02-16-2009  |  12345   |    Y
如上所示,我试图根据Startdate和enddate之间的日期加载student的活动数据

我们没有任何使用startdate和enddate的每日数据,我们需要创建每日数据。如果EndDate和next Startdate之间存在间隙,则这些日期的活动字段应为“0”

有人能建议怎么做吗?

这需要日历表和连接

注意:我使用递归CTE生成日期。最好创建物理日历表,并在这样的查询中使用它

这应该行得通

declare @tmp date;
select @tmp = max(EndDate) from tmpTable;
print @tmp
;with cte as
(
select min(StartDate) over() as dd from tmpTable
union all select dateadd(day,1,dd) from cte where dd < @tmp
)

select distinct dd as StartDate, isnull(Studid, 12345), isnull(Active,0) as Active from tmpTable as t 
right join cte as c on c.dd between t.startDate and t.enddate  
where t.Studid = 12345 or t.studid is null
option (maxrecursion 0)

还有……你试了什么?您是否使用任何已知的SQL Server日期函数?你使用案例陈述吗,IIF逻辑?请帮助我们或删除问题,因为SO不是帮助台。我尝试了case语句,该语句返回Startdate活动字段的数据,并尝试在Startdate和enddate之间创建日期范围,并用作此表的交叉联接。我没有试过如果逻辑,我会试一下如果逻辑。谢谢