我有下表包含每个员工的版本:
EmployeeId Status Department CurrentRecord EmployeeVersion
45 1 33 0 1
45 1 45 0 2
45 2 45 0 3
我想更新CurrentRecord并将其设置为EmployeeVersion最大的记录(因为它是最新版本),将其设置为1,如下所示:
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
)
我有以下错误:
子查询返回了多个值。当子查询遵循=,!=,,> =,或当子查询用作表达式。
您可以使用可更新的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
);
; 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
输出