Вы не можете использовать агрегаты напрямую с UPDATE
, так как вы объединяете строки для агрегации, а способ связывания исходной строки не ясен для механизма.
Рассчитайте ваши агрегаты вподзапрос или CTE, затем присоединитесь к таблице, чтобы обновить ее по ключу:
;WITH AggregatedData AS
(
SELECT
-- I'm assuming these columns are your key on LegMove table
m.Leg_Key,
l.Shipment_Number,
l.Shipment_Leg_Sequence,
-- Aggregated values to udpate
Event_Code = max(case when m.Status_Description = 'DPKL' then l.Status_Description else NULL end),
Create_Date = max(case when m.Status_Description = 'DPKL' then dateadd(dd,datediff(dd,0,l.Move_Create_Timestamp),0) else NULL end),
PTimeStamp = max(case when m.Status_Description = 'DPKL' then l.Move_Create_Timestamp else NULL end),
Acrual_Date = max(case when m.Status_Description = 'DPKL' then dateadd(dd,datediff(dd,0,l.Move_Status_Timestamp),0) else NULL end)
FROM
wrkLegMove m
inner join MovementMaster l with(nolock) on
l.Leg_Key = m.Leg_Key and
l.Status_Description = m.Status_Description and
l.Move_Create_Timestamp = m. FirstMoveTime
where
m.Status_Description in ('DPKL')
group by
m.Leg_Key,
l.Shipment_Number,
l.Shipment_Leg_Sequence
)
UPDATE L SET
Event_Code = A.Event_Code,
Create_Date = A.Create_Date,
PTimeStamp = A.PTimeStamp,
Acrual_Date = A.Acrual_Date
FROM
LegMove AS L
INNER JOIN AggregatedData AS A ON
L.Leg_Key = A.Leg_Key AND
L.Shipment_Number = A.Shipment_Number AND
L.Shipment_Leg_Sequence = A.Shipment_Leg_Sequence
Остерегайтесь этого , если вы объединяете меньше столбцов, чем агрегируемый, обновленные значения не будутсоответствует , так как вы будете создавать отношение от 1 до N к значениям, которые нужно обновить, а SQL Server будет свободно выбирать, что обновлять.