2012-11-21 77 views
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 

,然后通过添加一列

DECLARE @ColName VARCHAR(100) 
SET @ColName = 'Installed ' + CONVERT(Varchar, @DateA, 6) 

exec('ALTER TABLE #TableA ADD ['[email protected]+'] int NOT NULL CONSTRAINT [DF_#TableA_Installed on] DEFAULT 0') 

更新#TableA,然后将数据插入到新列。然后我需要在#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列添加,并不是每个项目将返回每个日期。

+0

我不知道为什么这篇文章的格式已经排在最后。当我编辑它时,它看起来不像这样。 – Fred

回答

1

绝对不会是好的,但,是的,你需要使用游标和迭代通过#tmpSnapshot_Dates,但如果您有选择,我建议您使用具有创建枢轴网格的功能的报告软件。

+0

我不能使用任何其他报告软件栏我有。我用过游标,并没有它可能的那么糟糕。最多12个日期应该没问题。 – Fred

0

难道不是最好有一个单独的表引用ItemId#TableA如(临时):

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