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;
我想保留最新的查询以跟踪付款。 它会给出错误,即某些东西不是聚合函数的一部分
答案 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]
,但如果您不需要,可以使用方括号。