SQL Server: обновление значений из одной строки в новую строку на основе значения другого столбца - PullRequest
0 голосов
/ 27 ноября 2018

Мне трудно понять, как этого добиться.Вот моя таблица:

Person_ID | Attribute_ID | Datetime
1000        99             1965-01-01 00:00:00.000
1000        19             NULL
2000        99             2002-05-02 00:00:00.000
2000        19             NULL

Мне нужно найти все идентификаторы лиц, для которых Attribute_ID, равный 99, не равен нулю.Затем мне нужно скопировать это значение DateTime в Datetime, связанный с attribute_ID, равным 19. Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Найдите ненулевое значение DateTime, принадлежащее строке с тем же Person_ID:

update tablename t
  set DateTime = 
(select DateTime from tablename
where Attribute_ID = 99 and Person_ID = t.Person_ID and DateTime is not null) 
WHERE Attribute_ID = 19 
0 голосов
/ 27 ноября 2018
  UPDATE TABLE SET DATETIME = (SELECT DISTINCT 
   DATETIME FROM TABLE WHERE DATETIME IS NOT 
   NULL AND ATTRIBUTE_ID =99 AND PERSON_ID=TABLE.PERSON_ID) WHERE 
     ATTRIBUTE_ID=19;

Этот запрос извлекает различные значения datetime для attribute_id как 99, за исключением значений NULL, и обновляет эти значения datetime для attribute_id как 19 после этого.

0 голосов
/ 27 ноября 2018

Если предположить, что Person_ID & Attribute_ID уникален, то должно работать следующее (хотя и не проверено):

update T
  set [DateTime] = X.[DateTime]
from MyTable T
inner join (
  select Person_ID, [DateTime]
  from MyTable
  where Attribute_ID = 99 and [DateTime] is not null
) X on X.Person_ID = T.Person_ID
where Attribute_ID = 19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...