一个recent question of mine新行给了我这样的格式生成数据的简单方法:SQL代码来生成基于现有的行
Date 1.0 2.0 3.0 Completed
2017-01-01 10 10 5 0
2017-02-01 10 10 5 5
2017-03-01 15 10 5 15
2017-04-01 15 10 5 25
这数据代表的是“燃耗”数据的敏捷项目。但这只是过去的数据,我们也需要预测未来的数据。只有日期和完成值将改变未来,他们将通过值在另一个表中增加,如
Project Velocity Days
Foo 25 14
Bar 35 21
我需要生成在第一表其他行,日期和通过递增完成值在第二个表中的值, 这样的:
Date 1.0 2.0 3.0 Completed
2017-04-15 15 10 5 50
2017-04-29 15 10 5 75
2017-05-13 15 10 5 100
2017-05-28 15 10 5 125
您还没有所需的额外的行数(多远的未来进行预测),但我拍摄的另外10行现在。
由于SQL在FOR循环中似乎并不大,我怎么能用原始数据生成这些额外的行和联合它们(或别的东西)?
更新#1: 基础上的评论,我看着Numbers表格(其它有关SQL的东西我从来没有听说过!),创建一个,并用它这样的:
DECLARE @EndDate date = '20170731'
DECLARE @StartDate date = (select top 1 Date from VersionHistory order by Date DESC)
DECLARE @StartCompleted int = (select top 1 StoryPoints from VersionHistory where Version='Completed' order by Date DESC)
DECLARE @DateIncrement int = (select top 1 Days from Velocities)
DECLARE @Velocity int = (select top 1 Velocity from Velocities)
SELECT
[Date] = DATEADD(DAY, Number * @DateIncrement, @StartDate),
[StoryPoints] = @StartCompleted + Number * @Velocity
FROM dbo.Numbers
WHERE Number <= DATEDIFF(DAY, @StartDate, @EndDate)/@DateIncrement
ORDER BY Date;
这产生这样的新的“未来”的价值观:
Date StoryPoints
2017-04-15 50
2017-04-29 75
2017-05-13 100
2017-05-27 125
2017-06-10 150
2017-06-24 175
2017-07-08 200
2017-07-22 225
这是几乎一路。我还需要在原来的表为“重复”从另一列中的值,使最终输出结果如下:
Date 1.0 2.0 3.0 Completed
2017-04-15 15 10 5 50
2017-04-29 15 10 5 75
2017-05-13 15 10 5 100
2017-05-28 15 10 5 125
...
因为我原来的数据只是从另一个语句来(见related question),如何我可以从那些数据中的最后一行获取这些值并包含在这些新数据中吗?请记住,除了“日期”和“已完成”之外,列名不会事先知道。
我假设我必须更改我的原始数据以将其存储在临时表中以提取我需要的内容,将这个新的Numbers-Table派生的数据存储在另一个临时表中,然后UNION它们,但是我卡住了这个的一些机制。
我在tsql中使用递归CTE来处理这类事情 –
您可以使用一个计数(数字)表。我不完全了解您的示例数据和期望的结果之间的联系,所以我不会发布答案,而是查看加入数字表格的选项。 –
这些数据集之间的关系是什么? – scsimon