Ms access 两个内部联接和防止查询中的重复记录

Ms access 两个内部联接和防止查询中的重复记录,ms-access,database-design,inner-join,Ms Access,Database Design,Inner Join,这是我的设想。基本上,我有一个与父作业表关联的作业项表。这些JobItem记录包含一个用于将其与父记录关联的JobID,一个指定工作功能的函数代码,以及一个指定与该功能的1个单元的成本相关联的成本的函数成本 我有一个时间表,其中包含有关员工所做工作的信息。因此,如果他们说他们做了50个单位的函数代码,这需要与作业项相关联,其中时间表上的作业ID与作业项表中的作业ID相匹配,并且时间表上的功能代码与作业项上的功能代码相匹配 这样,我就可以通过将员工完成的单位乘以单位成本(在JobItem表单上)来

这是我的设想。基本上,我有一个与父作业表关联的作业项表。这些JobItem记录包含一个用于将其与父记录关联的JobID,一个指定工作功能的函数代码,以及一个指定与该功能的1个单元的成本相关联的成本的函数成本

我有一个时间表,其中包含有关员工所做工作的信息。因此,如果他们说他们做了50个单位的函数代码,这需要与作业项相关联,其中时间表上的作业ID与作业项表中的作业ID相匹配,并且时间表上的功能代码与作业项上的功能代码相匹配

这样,我就可以通过将员工完成的单位乘以单位成本(在JobItem表单上)来准确地计算工作成本

因此,我在JobItem和TimesheetItem之间使用一个内部联接。这样可以吗?这种设计适合这种情况吗

希望这不会令人困惑。谢谢你的帮助

谢谢

SELECT TimesheetItem.EmployeeID, 
  SUM(JobItem.FunctionCost * TimesheetItem.UnitCompleted) AS TotalCostPerEmployee
FROM (Job
  INNER JOIN JobItem ON Job.ID = JobItem.JobID) 
  INNER JOIN TimesheetItem ON (JobItem.JobID = TimesheetItem.JobID) 
    AND (JobItem.FunctionCode = TimesheetItem.FunctionCode)
GROUP BY TimesheetItem.EmployeeID
上面的查询是如何获取每个员工所完成工作的总价值的示例。您必须用实际字段名替换
TimesheetItem.UnitCompleted
TimesheetItem.EmployeeID

如果您希望按
FunctionCode
对总计进行分组,则以下操作应有效:

SELECT TimesheetItem.FunctionCode, 
  SUM(JobItem.FunctionCost * TimesheetItem.UnitCompleted) AS TotalCostPerFunctionCode
FROM (Job
  INNER JOIN JobItem ON Job.ID = JobItem.JobID) 
  INNER JOIN TimesheetItem ON (JobItem.JobID = TimesheetItem.JobID) 
    AND (JobItem.FunctionCode = TimesheetItem.FunctionCode)
GROUP BY TimesheetItem.FunctionCode

谢谢这与我的查询结构基本相同。现在我的问题是:如果有两个作业项具有相同的JobID和FunctionCode怎么办。如果员工的时间表中有5小时的工作ID和功能代码相同,是否会因为内部加入查询而“重复计算”?例如,如果JobItem表中有两个匹配项与时间表上指定的FunctionCode和JobID相匹配,那么它会显示10小时的工作时间吗?再次感谢。是的,如果您是按功能代码分组,则任何与该功能代码相关的内容都将包含在值中。记录的总和取决于您对它们的分组方式。因此,您可能正在寻找
按JobItem.JobID、TimesheetItem.FunctionCode分组,对。但我确实使用了
按JobItem.JobID分组,TimesheetItem.FunctionCode
,这仍然给了我一个副本。这是因为我有一个作业,其中有两个项都具有相同的FunctionCode和JobID。因此,当我运行查询以按JobID和FunctionCode对时间卡分组求和时,时间会加倍,因为相同的FunctionCode和JobID在被引用的作业中会显示两次。这有意义吗?是否需要将其拆分为一个单独的查询?因此,您的意思是不希望基于FunctionCode/JobID求和。您的表中有哪些字段可以使您进入正确的分组?听起来您想根据项目进行分组。那么像
groupbyjobitem.ItemId、JobItem.JobID、TimesheetItem.FunctionCode这样的东西怎么样