在MS ACCESS上更新组中具有最小值的行

时间:2017-02-01 03:57:04

标签: sql vba access

我有以下Select语句。 [Flag]的值已默认为“No”

select t.[Id], t.[Name], t.[NRIC], t.[Flag], t.[Hierarchy], t.[LoadDt] 
from [EmployeeMaster] t
inner join (
select ID, LoadDt, Min(Hierarchy) As MinHierarchy
from [EmployeeMaster]
group by ID, LoadDt
) s on t.[ID] = s.[ID] and t.[Hierarchy] = s.[MinHierarchy]

在此之后,我需要使用

更新上述select语句的所有结果
update [EmployeeMaster] set [EmployeeMaster].[Flag] = 'Yes'

如何在MS ACCSS VBA脚本中将其合并为1个查询?

基本上我想要实现的是给出以下EmployeeMaster表的示例:

ID | Name | NRIC | Flag | Hierarchy | LoadDt 
001| ABCD | ZZZZ |  NO  |     6     | 31/1/2017 
001| ABCD | ZZZZ |  NO  |     5     | 31/1/2017 
001| ABCD | ZZZZ |  NO  |     1     | 31/1/2017 
002| WXYZ | YYYY |  NO  |     9     | 31/1/2017 
002| WXYZ | YYYY |  NO  |     8     | 31/1/2017 

我希望能够实现以下输出:

ID | Name | NRIC | Flag | Hierarchy | LoadDt
001| ABCD | ZZZZ |  NO  |     6     | 31/1/2017 
001| ABCD | ZZZZ |  NO  |     5     | 31/1/2017
001| ABCD | ZZZZ |  Yes |     1     | 31/1/2017
002| WXYZ | YYYY |  NO  |     9     | 31/1/2017
002| WXYZ | YYYY |  Yes |     8     | 31/1/2017

1 个答案:

答案 0 :(得分:1)

在访问中,您不能在update语句中使用聚合,因为它会产生以下错误:

  

操作必须使用可更新的查询。

而是使用简单的自联接为每个id查找具有min Hierarchy的行,然后执行更新。

试试这个:

UPDATE [EmployeeMaster] t
left join [EmployeeMaster] s
on t.[ID] = s.[ID] and t.[Hierarchy] > s.[Hierarchy]
SET t.[Flag] = 'Yes'
where s.[ID] is null