首页 > 解决方案 > MS SQL Server、数组、循环和将合格数据插入表中

问题描述

我四处寻找答案,但我不确定如何最好地构建问题,因为我对 SQL Server 相当陌生。

这就是我要做的事情:我收到一份每周报告,详细说明已售出的产品以及每种产品的数量。这些数据需要进入年度总计表。在此表中,第一列是 product_id,接下来的 52 列是周数,1-52。

在每周和每年表的 product_id 上都有一个 JOIN。这会找到合适的行和列来放置该产品的每周数量数据。

这就是我不知道该怎么做的地方。在 2019 年,该列中没有 product_id。所以没有什么可以加入的。如果它们不存在,则需要每周添加这些 product_id。我需要获取 product_id 和数量的每周报告并检查每个 product_id 以查看它是否在年表中。如果没有,我需要添加它。

如果我按照自己的方式进行操作,我会从每周数据中创建一个 product_id 数字数组,并循环遍历每个数字,在年表中为尚未存在的任何 product_id 创建一条新记录。我不知道如何在 SSMS 中最好地做到这一点。

我四处搜索并找到了不同的策略。没有什么让我觉得完美的解决方案。创建了一个@temp 表变量,一个使用排除的UNION 来获取那些不在表中的变量,以及一个WHILE 循环。任何的意见都将会有帮助。

标签: arrayssql-servertsql

解决方案


我最终使用 MERGE 来解决这个问题。我创建了一个表 WeeklyParts 将每周数据转储到其中。然后我对年度表进行合并,只插入那些不匹配的表。效果很好。

-- Merge the PartNo's so that only unique ones are added to the yearly table
MERGE INTO dbo.WeeklySales2018
USING dbo.WeeklyParts
ON (dbo.WeeklySales2018.PartNo = dbo.WeeklyParts.PartNo)

WHEN NOT MATCHED THEN
INSERT (PartNo) VALUES (dbo.WeeklyParts.PartNo);

推荐阅读