大家好,这几天我使用sql进行分析,遇到各种问题,感谢您的论坛,我解决了。
现在我想创建一个视图来恢复时间间隔并详细显示此间隔中的日期。
我有下表:
我想创建显示结果的视图:
例如在 player1 MyTable 中从 01/01/2012 到 05/01/2012 播放五天。因此,视图显示 player1 的 5 行,日期为 01/01/2012、02/01/2012、03/01/2012、04/01/2012、05/01/2012。
预先感谢您的帮助。
大家好,这几天我使用sql进行分析,遇到各种问题,感谢您的论坛,我解决了。
现在我想创建一个视图来恢复时间间隔并详细显示此间隔中的日期。
我有下表:
我想创建显示结果的视图:
例如在 player1 MyTable 中从 01/01/2012 到 05/01/2012 播放五天。因此,视图显示 player1 的 5 行,日期为 01/01/2012、02/01/2012、03/01/2012、04/01/2012、05/01/2012。
预先感谢您的帮助。
您必须创建一个为您提供日期范围的公用表表达式(我已经创建了当月的日期范围,但您可以选择另一个范围):
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
另一种方法是简单地创建一个枚举表来为日期添加值:
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 开始的整数序列。