I need to store some data in Access. To check how it works I have tried to make a simplified structure with three tables: Workers, Months, Reports. In the Months table I simply list months of the year to be used in Reports. In the Report table I want to store the number of items made by every worker during each month. So I have relationships: Reports.Worker -> Workers.ID, Reports.Month -> Months.ID. Please see the picture: enter image description here

目标:每个工人在每个月的报告中都有12条相应的记录.我想创建像"Worker1,一月","Worker1,二月"等报告字段,这样以后我就可以简单地添加报告,而不需要手动填写工人和月份字段.

我试过的是:

  1. 在查询设计中,我以报表为基表进行了查询.我将连接添加到其他两个表中,并将连接属性设置为" Select ‘Worker’中的所有记录..."和"从‘月’中 Select 所有记录...".然后我添加了字段Workers.WorkerName、Months.MonthName、Reports.Report.然而,这给出了错误"歧义的外部联接",并建议创建两个查询.

  2. 我对Reports和Worker进行了查询,并将Join属性设置为"从‘Worker’中 Select 所有记录...".因此,现在我确实可以 for each 员工自动创建报告.

我的疑问是:

enter image description here

结果:

enter image description here

接下来,我进行了另一个查询.在那里,我使用MONTS表联接了第一个查询.同样,我将Join属性设置为"从‘Monters’中 Select 所有记录...".然而,这似乎覆盖了我在第一个查询中拥有的数据.

我的疑问是:

enter image description here

结果:

enter image description here

如果我删除查询和表之间的联接,我确实会得到想要的结果.但它是不可更新的,我不能输入任何报告.

-你在说什么?

enter image description here

结果:

enter image description here

我希望我的解释足够清楚.任何帮助都是非常感谢的!

推荐答案

要"批处理"为Reports表中的每个工作人员创建一组月记录,请使用INSERT INTO SELECT操作SQL,该操作将生成两个表的笛卡尔积(每个表的记录与其他表的每个记录相关联).其 struct 将是:

INSERT INTO Reports([Month], Worker) SELECT Months.ID, Workers.ID FROM Months, Workers

可以用Ribbon Run手动执行,也可以构建VBA或宏程序,通过点击窗体按钮来执行.

为防止意外重复月份/员工对,请将这两个字段设置为报告表中的唯一复合索引.

Month是保留字.建议不要使用保留字作为任何事物的名称.最好是MonRep.还建议不要在多个表中使用完全相同的字段名称.将ID字段重命名为唯一.

当稍后通过表单数据输入将新Worker添加到Worker时,VBA可以运行代码来为该新Worker创建报告记录.首先,代码将记录保存在表单上,然后执行SQL:

DoCmd.RunCommand acCmdSaveRecord
CurrentDb.Execute "INSERT INTO Reports([Month], Worker) SELECT ID, " & Me.ID & " FROM Months"

Sql相关问答推荐

SQL:创建查询以添加减少的总数

Select /过滤postgr中的树 struct

跨多列的PostgreSQL非不同对

如何在Snowflake SQL存储过程中传递LIMIT和OFFSET的参数?

使用Mac日志(log)时间找出SQL中的好小时和坏小时

有没有办法在每次计算每一行的数据时更新2个值?

在SQL中返回缺省值,即使查询不返回任何结果

PostgreSQL:按小时查看调整日期

将FLOAT转换为VARBINARY,然后再转换回FLOAT

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

将用户授予另一个用户不授予权限

将 jsonb 数组中的对象取消嵌套到单独的行中

比使用NOT EXISTS更高效的SQL删除方法是什么?

SQL获取两个日期范围之间的计数

Postgresql 需要一个查询,为我提供所有没有具有特定状态值的子元素的父母

计算 SQL 中的总体成功率:递归 CTE 还是替代方法?

如何通过子 Select 在一次更新(并行数组)中多次更新相同的行

如何通过存储过程将 root 的下一个子 node 作为父 node ?

snowflake插入覆盖行为

从不同的表中 Select 包含单词列表的记录