You write SET only once in update clause:
WITH UpdateAverageLabourCost (ProductId,OH,Labour) AS
(
SELECT
AC.ProductId,
AC.OH,
AC.AVGDirectLabour + MAN + SUB - OH AS Labour
FROM dbo.AVGCost AC
INNER JOIN dbo.Products p ON AC.ProductId = p.CrossReference
WHERE Type <> 'P' AND AVGDirectLabour >0
)
UPDATE dbo.Products
SET Products.SLC = Labour,
Products.SOC = OH
FROM
UpdateAverageLabourCost
WHERE Products.CrossReference = UpdateAverageLabourCost.ProductId
Regards
Piotr
...and your only reply is slàinte mhath