在日期时间间隔内传播表格

时间:2012-05-27 09:14:46

标签: sql sql-server sql-server-2008 tsql sql-server-2005

大家好,有些日子我用sql进行分析,并且由于你的论坛,我遇到了我解决的各种问题。

现在我想创建一个恢复时间间隔的视图,并详细显示此时间间隔内的日期。

我有下表:

enter image description here

我想创建显示结果的视图:

enter image description here

例如在player1 MyTable中从2012年1月1日开始播放5天   到05/01/2012。因此视图显示播放器1的5行,日期为01/01 / 2012,02 / 01 / 2012,03 / 01 / 2012,04 / 01 / 2012,05 / 01/2012。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您必须创建一个公用表格表达式,为您提供日期范围(我已创建当月的日期范围,但您可以选择其他范围):

WITH DateRange(dt) AS
(
SELECT CONVERT(datetime, '2012-01-01') dt
UNION ALL
SELECT DATEADD(dd,1,dt) dt FROM DateRange WHERE dt < CONVERT(datetime, '2012-01-31')
)

SELECT dates.dt AS DatePlaying, PlayerName 
FROM MyTable t
JOIN DateRange dates ON dt BETWEEN t.BeginDate AND t.DateEnd
ORDER BY PlayerName, DatePlaying 

答案 1 :(得分:0)

另一种方法是创建一个枚举表来为日期添加值:

with enumt as (select row_number() over (order by (select NULL)) as seqnum
               from mytable
              )
select dateadd(d, e.seqnum, mt.DateBegin) as DatePlaying, mt.PlayerName
from MyTable mt join
     enum e
     on enumt.seqnum <= e.NumberOfPlayingDay

“with”子句的唯一目的是生成从1开始的整数序列。