3

大家好,这几天我使用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。

预先感谢您的帮助。

4

2 回答 2

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 
于 2012-05-27T10:05:49.410 回答
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 开始的整数序列。

于 2012-05-27T13:21:39.540 回答