2015-12-10 58 views
0

我试图在Excel中使用vba来做到这一点,但我已经放弃了,现在我试图在访问中使用查询来做到这一点。访问SQL查询:比较两个表来添加数据

下表1和2只是一个示例,实际的有26000多行。

表1是从Excel中的自动报告中获得的,然后导出为访问并用作模板。所有列都是自动的,除了手动添加的最后一个“附加费”。

每周都会生成一个新的报告(表2),其中新的行和新的价格(标记为橙色)并导出为访问,但我不想每周都手动添加列surchage。

只要公司,城市,产品和参考号码在两个表中匹配,我需要做的就是修改表2,以便在查询中包含来自表1的列附加费。

enter image description here

这样与空白栏“附加费”的新行可以手工填写,然后表2被保存为模板,直到下一周,当一个新的报告将创建一个新表进行比较用。

感谢您的所有意见和支持

回答

0

非常简单的操作查询集。但是,您需要使用临时表(如表3)临时保存新的星期数据,然后在处理后迁移到表1。下列选项中使用INNER JOIN查询匹配两个表:

选项1:删除(上表3的记录 - 一定要创建副本的第一次)/附加(空表3)/删除(前表1记录)/ Append(空表1) - 将每个语句保存为单独存储的查询并按顺序运行它们或将它们作为VBA字符串SQL语句也按顺序编写。

DELETE FROM table3; 

INSERT INTO table3 (company, city, product, surcharge) 
SELECT t2.company, t2.city, t2.product, t1.surcharge 
FROM table2 t2 
INNER JOIN table1 
ON t1.company = t2.company 
AND t1.city = t2.city 
AND t1.product = t2.product 

DELETE FROM table1; 

INSERT INTO table1 (company, city, product, surcharge) 
SELECT company, city, product, surcharge 
FROM table3; 

选项2:表查询(表3成 - 允许它覆盖前一个)/删除(表1,从以前的记录)/附加(空表1)

SELECT t2.company, t2.city, t2.product, t1.surcharge 
INTO table3 
FROM table2 t2 
INNER JOIN table1 
ON t1.company = t2.company 
AND t1.city = t2.city 
AND t1.product = t2.product 

DELETE FROM table1; 

INSERT INTO table1 (company, city, product, surcharge) 
SELECT company, city, product, surcharge 
FROM table3;