recent question of mineは私にこのような形式のデータを生成する簡単な方法を与えました。これは過去のデータですが、将来のデータも予測する必要があります。日付のみと完成した値は、将来的に変更されます、そして、彼らは私が日付で第一の表の追加の行、およびによってインクリメント完成した値を生成する必要がSQLコード
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ループには大きくないようですので、これらの追加の行を生成して元のデータと結合するにはどうすればよいですか?
UPDATE#1: コメントに基づいて、私は、(!私は聞いたことがなかったSQLについて何か他のもの)1を作成した番号のテーブルに見て、このようにそれを使用:
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を参照してください):最終的な出力は次のようになりますように、私はまだ、元のテーブルの他の列の値を「リピート」する必要がありますそのデータの最後の行からこれらの値を取得し、この新しいデータに含めることはできますか?カラム名は、DateとCompleted以外のカラム名は事前にわかっていないことに注意してください。
オリジナルのデータを変更して必要なものを抽出し、この新しいNumbersテーブルの派生データを別の一時テーブルに保存してから結合する必要があると思いますが、これの仕組みのいくつかについています。
tsqlのこの種のものに対して再帰的なCTEを使用します。 –
タリー(数値)テーブルを使用できます。私はあなたのサンプルデータと望ましい結果との関係を完全に理解していないので、私は答えを投稿するつもりはありませんが、数値テーブルに参加するオプションを見てください。 –
これらのデータセットの関係は何ですか? – scsimon