我有一个图像汇总表 [summary],它将在不久的将来用作报告表。有一个参考表 [views] 和图像团队填充的第三个表 [TeamImage]。汇总表每个零件号有 1 行(表格有不同的零件号)和多列图像视图(TOP、BOT、FRO、BAC 等)。[views] 表列出了这些视图中的每一个,并带有一个 id 字段,它是一个 IDENTITY 字段。[TeamImage] 表包含零件编号和视图(零件编号字段不是唯一的,因为零件编号将被多次列出,因为它们具有图像视图)。
例子:
TABLE [summary]
Part_Number | TOP | BOT | FRO | BAC |
12345 | | | | |
67890 | | | | |
TABLE [views]
id | View |
1 | TOP |
2 | BOT |
3 | FRO |
4 | BAC |
TABLE [TeamImage]
PartNum | View |
12345 | TOP |
12345 | BOT |
12345 | FRO |
12345 | BAC |
67890 | FRO |
67890 | BAC |
这就是我最终需要的:
TABLE [summary]
Part_Number | TOP | BOT | FRO | BAC |
12345 | 1 | 1 | 1 | 1 |
67890 | | | 1 | 1 |
我可以运行几个更新查询,但我有 27 个视图和大约 200 万个零件号。我希望我可以运行类似下面的东西,即使我知道我不能使用变量作为列名:
DECLARE @id int = (SELECT max(id) FROM [views]), @ViewType nvarchar(3);
WHILE @id IS NOT NULL
BEGIN
SELECT @ViewType = (SELECT [View] FROM [views] WHERE id = @id);
UPDATE a
SET a.[@ViewType] = '1'
FROM [summary] a
INNER JOIN [TeamImage] b
AND a.[Part_Number] = b.[PartNum]
WHERE b.[View] = @ViewType;
SELECT @id = max(id) FROM [views] WHERE id < @id;
END;
基本上,我希望使用一个变量来从 [views] 表中获取不同的视图(id = 27 到 id=1 ... 可以计算但没关系)并填充 [views] 中的相应字段汇总表。
我知道 SET a.[@ViewType] = '1' 不起作用,我的一位同事提到使用 VB 但不知道这是否真的是最有效的选择。我知道我可以在 [TeamImage] 表上使用 PIVOT,但我不确定是否可以更新我的 [summary] 表(其中包含更多字段,而不仅仅是图像视图)。看来我仍然需要一些能够有效循环更新查询的东西。我可以编写 4 个更新查询,每个视图一个(虽然我的真实表有 27 个视图),但我需要一些更动态的东西,以防我们将来添加视图。