When using SELECT CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine), MAX(SOURCE.LastDate) GROUP BY CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine)
and SELECT CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine), MAX(TARGET.LastDate) GROUP BY CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine)
in
MERGE dbo.TargetTbl AS TARGET
USING dbo.SourceTbl AS SOURCE
ON (TARGET.OrderNo = SOURCE.OrderNo)
WHEN MATCHED AND EXISTS (SELECT CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine)
,MAX(SOURCE.LastDate)
GROUP BY CONCAT(SOURCE.OrderNo, '_', SOURCE.OrderLine)
INTERSECT SELECT CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine)
,MAX(TARGET.LastDate)
GROUP BY CONCAT(TARGET.OrderNo, '_', TARGET.OrderLine)
)
THEN UPDATE SET TARGET.IsBlocked = 1;
I get this error:
Each GROUP BY expression must contain at least one column that is not an outer reference.
I searched and found some solutions, but none of them is applicable to my query or at least I don't know how to. Any help would be greatly appreciated.
EDIT: I definitely can have two identical rows in the SOURCE & TARGET tables and it throws me this error:
The MERGE statement attempted to UPDATE or DELETE the same row more than once. This happens when a target row matches more than one source row. A MERGE statement cannot UPDATE/DELETE the same row of the target table multiple times. Refine the ON clause to ensure a target row matches at most one source row, or use the GROUP BY clause to group the source rows.
By adding GROUP BY it gives me the outer reference error mentioned above.