我一直在寻找答案,由于我对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使用exclude来获取不在表中的变量,以及一个WHILE循环。任何建议都会有所帮助。
答案 0 :(得分:0)
我最终使用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);