arrays - 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 循环。任何的意见都将会有帮助。
解决方案
我最终使用 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);
推荐阅读
- javascript - 是否可以循环 ws.send?
- python-3.x - 如何使用flask在html中单击提交时调用python函数
- email - 有什么方法可以检索通过 EWS 创建的电子邮件的 ItemID
- php - 如何在php中存储firebase返回的第一个数组的所有值
- java - 如何将字典、数组作为 java 数据源库中的自定义属性添加到 Google 可视化(图表)
- c++ - “使用命名空间:std;”的功能是什么 在 C++ 中?
- python - 合并排序执行中的逻辑错误
- node.js - Express:自动查看路由
- git - 让 git diff 忽略两个文件中的时间戳
- python - 为什么我的嵌套while循环不起作用python?