将包含MAX的查询转换为Access中的UPDATE语句

时间:2016-03-25 00:16:20

标签: sql ms-access sql-update

我有一个包含年,月,分的表格,我创建了一个查询来隔离每个月的MAX分数。现在我想创建一个更新查询,标记新列中的每个项目,但我不太确定如何给出MAX。

SELECT a.Year, Max(a.Score) AS MaxOfScore, a.Month FROM a GROUP BY a.Year, a.Month, a.Score HAVING (((a.Month) Is Not Null));

如何编写将“x”添加到新列的更新语句,a。高?

由于

2 个答案:

答案 0 :(得分:0)

我不确定将此作为静态值添加到表中是您真正想要做的事情,但这里是代码:

update a set a.high = b.MaxOfScore from 
a left join (
SELECT a.Year, Max(a.Score) AS MaxOfScore, a.Month
FROM a
GROUP BY a.Year, a.Month
HAVING (((a.Month) Is Not Null))
) b on a.year = b.year and a.month = b.month

您可能想要做的只是选择带有查询的值:

SELECT a.Year, a.Month, a.Score, b.MaxOfScore from
a left join (
SELECT a.Year, Max(a.Score) AS MaxOfScore, a.Month
FROM a
GROUP BY a.Year, a.Month
HAVING (((a.Month) Is Not Null))
) b on a.year = b.year and a.month = b.month

答案 1 :(得分:0)

在MS Access SQL中,更新查询必须是可更新的,因此无法将聚合查询连接到单元级表。但是,您可以使用Domain Aggregate functions。此外,如果月份和年份是字符串,请确保将它们的值与附加的单引号连接:

UPDATE a
SET a.High = DMax("Score", "a", "Year=" & a.Year &  
                                " And Month=" & a.Month & 
                                " And Month Is Not Null");

请注意:域功能仅适用于MS Access UI程序中的SQL查询,而不适用于使用ODBC / OLEDB在MSAccess.exe外部调用的Jet / ACE SQL引擎。