
With CTE as
(
Select IB.Batchkey,IB.productkey,IB.warehousekey,IB.batchnumber,row_number() over (partition by IB.productkey,IB.warehousekey,IB.batchnumber order by IB.Batchkey) as BatchRowNumber from InvBatch IB JOIN (
select productkey,warehousekey,batchnumber from InvBatch
group by productkey,warehousekey, batchnumber
having count(1) > 1) GB
ON IB.productkey = GB.productkey AND IB.WarehouseKey = GB.WarehouseKey AND IB.BatchNumber = GB.BatchNumber
)
Delete from invbatch where batchkey in (Select batchkey from CTE where BatchRowNumber > 1 )