大家好,有些日子我用sql进行分析,并且由于你的论坛,我遇到了我解决的各种问题。
现在我想创建一个恢复时间间隔的视图,并详细显示此时间间隔内的日期。
我有下表:
我想创建显示结果的视图:
例如在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。
提前感谢您的帮助。
答案 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开始的整数序列。