Обновить строку другой строкой в ​​одной таблице - PullRequest
0 голосов
/ 15 января 2019

Я использую 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 голосов
/ 15 января 2019

Поскольку запросы на обновление должны быть обновляемыми в MS Access, рассмотрим совокупность доменов DMax, которая соответствует коррелированному подзапросу:

UPDATE table1 t1 
SET Criteria2 = DMax("Criteria2", "table1", 
                     "Criteria1 IS NOT NULL AND Identifyer1 ='" & t1.Identifyer1 & "' 
                      AND Identifyer2 = '" &  t1.Identifyer2 & "'")
0 голосов
/ 15 января 2019

Попробуйте это

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 
...