在一个表中用另一行更新一行

时间:2019-01-15 17:53:23

标签: sql ms-access-2016

我正在使用Access 2016,并且我有一个表,其中缺少一些数据。我需要根据同一表的其他行更新丢失的数据。该表具有两个标识符和两个条件字段,而空字段代表丢失的数据。幸运的是,仅在Criteria2列中以及Criteria1不为NULL时才丢失数据:

Identifyer1  Identifyer2  Criteria1  Criteria2  
  10             a                     A3        
  10             a           X        NULL     
  20             b                     B3     
  30             c                     C3
  40             d                     D3
  40             d           Y        NULL

要填充丢失的数据,只需复制相同标识符的Criteria2值即可。因此结果应如下所示:

Identifyer1  Identifyer2  Criteria1  Criteria2  
  10             a                     A3        
  10             a           X         A3     
  20             b                     B3     
  30             c                     C3
  40             d                     D3
  40             d           Y         D3

我已经尝试过类似的操作,但是我无法完成代码:

Update table1 Set Criteria2 = (如何在此处复制值?) Where Criteria1 is not NULL AND Identifyer1 = Identifyer1 AND Identifyer2 = Identifyer2

2 个答案:

答案 0 :(得分:1)

尝试一下

Update table1 
Set Criteria2 = (
  select max(criteria2) from table1 t1    
  where t1.identifier1 = table1.identifier1 
     and t1.identifier2 = table1.identifier2 
     and t1.criteria2 is not null
) 
Where Criteria1 is not NULL 

答案 1 :(得分:0)

由于更新查询必须是MS Access中的updateable,因此请考虑域集合DMax,它对应于相关的子查询:

UPDATE table1 t1 
SET Criteria2 = DMax("Criteria2", "table1", 
                     "Criteria1 IS NOT NULL AND Identifyer1 ='" & t1.Identifyer1 & "' 
                      AND Identifyer2 = '" &  t1.Identifyer2 & "'")