Обновить столбец CurrentRecord в зависимости от столбца EmployeeVersion - PullRequest
1 голос
/ 19 февраля 2020

У меня есть следующая таблица, содержащая версии для каждого сотрудника:

EmployeeId Status Department CurrentRecord EmployeeVersion
45         1      33         0             1
45         1      45         0             2
45         2      45         0             3

Я хочу обновить CurrentRecord и установить его равным 1 для записи, имеющей максимальное значение EmployeeVersion (так как это последняя версия), например ниже:

EmployeeId Status Department CurrentRecord EmployeeVersion
45         1      33         0             1
45         1      45         0             2
45         2      45         1             3

Это мой запрос:

UPDATE DimEmployeeSharedV1 
  SET CurrentRecord = 1 
WHERE EmployeeVersion = (
  SELECT MAX(e.EmployeeVersion)
  FROM DimEmployeeSharedV1 e
  WHERE e.EmployeeId = EmployeeId
  GROUP BY e.EmployeeId
)

У меня следующая ошибка:

Подзапрос возвратил более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы можете использовать обновляемый cte:

with ucte as (
     select v.*, row_number() over (partition by EmployeeId order by EmployeeVersion) as seq
     from DimEmployeeSharedV1 v
)
update ucte 
     set CurrentRecord = 1 
where seq = 1;

Коррелированный подзапрос также будет работать:

UPDATE v1
      SET v1.CurrentRecord = 1 
FROM DimEmployeeSharedV1 v1
WHERE v1.EmployeeVersion = (SELECT MAX(e.EmployeeVersion) 
                            FROM DimEmployeeSharedV1 e
                            WHERE e.EmployeeId = v1.EmployeeId
                           );
1 голос
/ 19 февраля 2020

Демонстрация на дб <> скрипка

; WITH cte as(
 select EmployeeId, max(EmployeeVersion) as EmployeeVersion
 from #A
 group by EmployeeId
)
update a
set CurrentRecord = 1
from #A a
inner join cte on a.EmployeeId = cte.EmployeeId and a.EmployeeVersion = cte.EmployeeVersion

Выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...