如何对付款金额进行分组,以便为​​每位员工提供最新金额?

时间:2014-12-01 02:27:56

标签: ms-access

SELECT Employee.EmployeeID, Employee.LastName, Employee.FirstName, (PayRecord.Quantity * PayClass.PayRate) AS Up-to-date
FROM Employee, PayRecord, PayClass
WHERE PayRecord.EmployeeID = Employee.EmployeeID and
PayRecord.PayClassID= PayClass.PayClassID
Group By Employee.EmployeeID;

我想保留最新的查询以跟踪付款。 它会给出错误,即某些东西不是聚合函数的一部分

2 个答案:

答案 0 :(得分:0)

SELECT Employee.EmployeeID, Employee.LastName, Employee.FirstName, max(PayRecord.Quantity) * max(PayClass.PayRate) AS Up-to-date
FROM Employee
JOIN PayRecord ON PayRecord.EmployeeID = Employee.EmployeeID
JOIN PayClass ON PayRecord.PayClassID= PayClass.PayClassID
GROUP BY Employee.EmployeeID, Employee.LastName, Employee.FirstName;

要记住的规则是,无论何时GROUP BY,SELECT的每一列都必须在GROUP BY子句中或在聚合函数中。我选择了" max",但我不确定你真正想要的是什么。

这是标准的SQL答案; Access的答案可能略有不同,但我对此表示怀疑。

答案 1 :(得分:0)

您应该学会使用明确的join语法。

您的具体问题是select列表中存在的列不在聚合函数中,也不在group by中。解决此问题的一种简单方法是将其添加到group by。但是,我认为计算应该是SUM()。查询看起来应该更像:

SELECT e.EmployeeID, e.LastName, e.FirstName, SUM(pr.Quantity * pc.PayRate) AS UpToDate
FROM (Employee as e INNER JOIN
      PayRecord as pr
      ON pr.EmployeeID = e.EmployeeID) INNER JOIN
     PayClass pc
     ON pr.PayClassID = pc.PayClassID
Group By e.EmployeeID, e.LastName, e.FirstName;

请注意,别名Up-to-date不是有效的列名。我删除了连字符。您也可以[up-to-date],但如果您不需要,可以使用方括号。