我有一个包含年,月,分的表格,我创建了一个查询来隔离每个月的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。高?
由于
答案 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引擎。