两个内部联接并防止查询中出现重复记录

时间:2014-02-04 15:16:48

标签: ms-access database-design inner-join

这是我的情景。基本上我有一个 JobItem 表,它与父 Job 表相关联。这些 JobItem 记录包含 JobID 以将它们与父记录相关联, FunctionCode 指定工作功能,以及 FunctionCost < / strong>指定与该功能的1个单位成本相关的成本。

我有一个 TimesheetItem 表,其中包含有关员工所做工作的信息。因此,如果他们说他们做了50个单位的 FunctionCode ,那么这需要绑定到 JobItem ,其中 TimesheetItem em>匹配 JobItem 表中的 JobID TimesheetItem 上的 FunctionCode FunctionCode匹配 JobItem 上的

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

所以我在 JobItem TimesheetItem 之间使用INNER JOIN。这样可以吗?对于这种情况,这是正确的设计吗?

希望这不会令人困惑。帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

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.UnitCompletedTimesheetItem.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