0

我有一个临时表,其中包含所有可用项目

#TableA

ItemId  ItemName    ItemVer
1       Name1       2
2       Name2       9
3       Name3       5
.
.
.
500     Name500     3

然后我有另一个保存快照的所有日期以及 SnapshotId

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

我的问题是

  1. 我是否以错误的方式接近它而在这里制造了一场噩梦?
  2. 我如何最好地循环#tmpSnapshot_Dates然后获取数据以创建下一列?我总是尽量避免使用游标,但这是我需要使用的情况之一吗?

可能有 12 列要添加,并不是每个日期都会返回每个项目。

4

2 回答 2

1

绝对不会很好,但是是的,您需要使用游标并遍历#tmpSnapshot_Dates.

于 2012-11-23T23:03:44.280 回答
0

Would it not be better to have a separate (temp?) table referencing the ItemId in #TableA eg:

InstalledDate    ItemId    Count
-------------    ------    -----
2012-01-01            1       34
2012-01-01            2       56
2012-01-01            3       12
.                     .        .
.                     .        .
.                     .        .
2012-01-01          500       98
2012-02-07            1       33
2012-02-07            2       59
2012-02-07            3       26
.                     .        .
.                     .        .
.                     .        .
2012-02-07          500      106
于 2012-11-21T15:47:49.000 回答