我有一个包含所有可用项目的临时表
#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
我的问题是
#tmpSnapshot_Dates
然后获取数据以创建下一列?我总是试图避免使用游标,但这是我需要使用的一种情况吗?可以添加12列,并且不会为每个日期返回每个项目。
答案 0 :(得分:1)
肯定不会很好,但是是的,你需要使用游标并迭代#tmpSnapshot_Dates
,但是如果你有选项,我建议你使用一个能够创建透视网格的报告软件
答案 1 :(得分:0)
在ItemId
中引用#TableA
的单独(temp?)表会不会更好,例如:
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