利用可能なすべてのアイテムを保持する一時的なテーブルがあります
#TableA
ItemId ItemName ItemVer
1 Name1 2
2 Name2 9
3 Name3 5
.
.
.
500 Name500 3
次に、SnapshotIdとともにSnapshotが取得されたすべての日付を保持する別のものがあります
CREATE TABLE #tmpSnapshot_Dates(
[SnapshotId] [uniqueidentifier] NOT NULL,
[DateTaken] datetime NOT NULL)
INSERT INTO #tmpSnapshot_Dates SELECT SnapshotId, DateTaken From Snapshot_Info Where DateTaken <= @EndDate
ここで、テーブル内の各日付について、#tmpSnapshot_Dates
各アイテムに関連するカウントを取得したいと思います
SELECT ItemId, Count(*) From Items Where SnapshotId = @SnapshotId
#TableA
次に、列を追加して更新します
DECLARE @ColName VARCHAR(100)
SET @ColName = 'Installed ' + CONVERT(Varchar, @DateA, 6)
exec('ALTER TABLE #TableA ADD ['+@ColName+'] int NOT NULL CONSTRAINT [DF_#TableA_Installed on] DEFAULT 0')
次に、データを新しい列に挿入します。次に、日付ごとにこれを繰り返す必要があります#tmpSnapshot_Dates
#TableA
次のような結果を与える
#TableA
ItemId ItemName ItemVer Installed 01 Jan 12 Installed 07 Feb 12
1 Name1 2 34 33
2 Name2 9 56 59
3 Name3 5 12 26
.
.
.
500 Name500 3 98 106
私の質問は
- 間違った方法でアプローチすることで、ここで悪夢を作り出していますか?
- ループしてから
#tmpSnapshot_Dates
データを取得して次の列を作成するにはどうすればよいですか?私は常にカーソルを避けようとしますが、これは私がカーソルを使用する必要がある状況の1つですか?
追加する列が12個ある可能性があり、日付ごとにすべてのアイテムが返されるわけではありません。