StartDate和EndDate列转换为一个包含多行的Date列

问题描述 投票:0回答:1

我从一个看起来类似于此的表开始:

Name    |   StartDate   |   EndDate
------------------------------------
Bob     |   5/1/2017    |   5/3/2017
Jeff    |   6/1/2017    |   6/1/2017  
Bob     |   7/8/2017    |   7/10/2017

我希望它最终像这样:

Name    |   Date
------------------------------------
Bob     |   5/1/2017    
Bob     |   5/2/2017    
Bob     |   5/3/2017
Jeff    |   6/1/2017
Bob     |   7/8/2017    
Bob     |   7/9/2017    
Bob     |   7/10/2017
sql sql-server
1个回答
3
投票

一种简单的方法是递归CTE:

with cte as (
      select name, StartDate, EndDate
      from t
      union all
      select name, dateadd(day, 1, StartDate), EndDate
      from cte
      where StartDate < EndDate
     )
select name, StartDate as dte
from cte;

如上所述,这可以使用大约100天。如果您需要更多,只需将option (maxrecursion 0)添加到查询的末尾即可。

© www.soinside.com 2019 - 2024. All rights reserved.