我一直在寻找如何做一些在 MS Access 2007 中应该很容易做的事情。
我有一个主表 items_moved,它按类型、按天跟踪收到的文件数。基本结构是:
ID(自动编号)、驱动器(文本)、类型(文本)、日期(DateTime)、file_count(编号)、file_size(编号)
典型数据如下:
1777, F:\snaps, pics, 6/09/2010, 66, 151616131
1778, F:\snaps, pics, 6/10/2010, 5, 464864
1779, G:\pics, pics, 6/09/2010, 58, 45645646
1780, G:\pics, pics, 6/10/2010, 70, 123456667
我有一个具有完全相同数据结构的临时表。临时表是通过从 items_moved 表的最后一天(包括)开始并查找新内容来生成的。
典型数据如下:
1, F:\snaps, pics, 6/10/2010, 366, 6531616131
2, F:\snaps, pics, 6/11/2010, 5, 464864
3, G:\pics, pics, 6/10/2010, 70, 123456667
4, G:\pics, pics, 6/11/2010, 56, 123645964
我要做的就是将临时表附加到主表上,以便:
- 没有重复(基于驱动器和日期)
- 如果临时表具有匹配的驱动器和日期以及更大的值,它将覆盖主表
- 如果该行存在于临时表中但不存在于主表中,则将其附加到 main 的末尾。
结果将在 items_moved 表中,该表将记录 1-1776 不变,但现在结束如下:
1777, F:\snaps, pics, 6/09/2010, 66, 151616131 (Unchanged)
1778, F:\snaps, pics, 6/10/2010, 366, 6531616131 (Updated temp was larger)
1779, G:\pics, pics, 6/09/2010, 58, 45645646 (unchanged)
1780, G:\pics, pics, 6/10/2010, 70, 123456667 (unchanged)
1781, F:\snaps, pics, 6/11/2010, 5, 464864 (added)
1782, G:\pics, pics, 6/11/2010, 56, 123645964 (added)
我已经尝试了我能想到的所有关于加入的变体。
我可以获得具有匹配日期的行,因此我可以将其用于更新语句。我无法从临时表中获取 items_moved 表中日期不匹配的行,因此无法运行插入。
最后一点是当用户从访问数据库请求报告时,将其作为 VB 操作的一部分执行。
这是一个片段
INSERT INTO items_moved (drive, type, file_date, file_count, file_size)
SELECT 'F:\snaps','pics', temp_table.created, Count(temp_table.created),
Sum(temp_table.size) FROM temp_table where temp_table.drive = 'F:\snaps'
GROUP BY temp_table.created
这有效,但只是添加到表格的末尾。我留下了重复的问题。我确信有一种方法可以即时对表进行重复数据删除,但这似乎是一种浪费。我发现了一些关于使用union的提示,但没有关于如何使用 union 更新联合中的一张表的信息。
任何输入将不胜感激。谢谢。