Следующий код может работать согласно вашим ожиданиям, но я все еще работаю над созданием двойной временной таблицы. а также вам нужно иметь основной идентификатор в основной таблице, чтобы обновить его, так как это просто покажет результат во временной таблице.
CREATE TABLE [dbo].[Data_FY19]
(
[Product_Code] [VARCHAR](150) NULL,
[RCV_Quantity] DECIMAL(12, 2) NULL,
[RCV_Unit_Cost] DECIMAL(12, 2) NULL,
[RCV_Total] DECIMAL(12, 2) NULL,
[Return_Flag] [VARCHAR](150) NULL
) ON [PRIMARY];
GO
INSERT INTO [dbo].[Data_FY19]
(
[Product_Code],
[RCV_Quantity],
[RCV_Unit_Cost],
[RCV_Total]
)
VALUES
('1234', '1', '10', '10'),
('1235', '2', '12', '24'),
('1236', '2', '15', '30'),
('1237', '1', '20', '20'),
('1238', '2', '15', '30'),
('1239', '3', '10', '30'),
('1240', '2', '20', '40'),
('1236', '4', '15', '60'),
('1234', '3', '10', '30'),
('1239', '-3', '10', '-30'),
('1236', '-2', '15', '-30'),
('1234', '-1', '10', '-10'),
('1237', '-1', '20', '-20'),
('1235', '-2', '12', '-24'),
('1235', '2', '12', '24');
SELECT IDENTITY(INT, 1, 1) AS rwno,
*
INTO #Data_FY19
FROM Data_FY19;
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Product_Code ORDER BY rwno ASC) AS rn
INTO #maxOfeach
FROM #Data_FY19;
--;WITH maxofeach AS
--()
UPDATE d1
SET Return_Flag = 'Y'
FROM #Data_FY19 d1
INNER JOIN #Data_FY19 d2
ON d1.Product_Code = d2.Product_Code
WHERE d1.rwno <> d2.rwno
AND d1.RCV_Total = ABS(d2.RCV_Total)
AND d1.RCV_Total + d2.RCV_Total = 0
AND d1.rwno IN
(
SELECT rwno
FROM #maxOfeach m
WHERE m.rn = 1
AND m.Product_Code = d1.Product_Code
);
SELECT *
FROM #Data_FY19;
UPDATE d2
SET Return_Flag = 'Y'
FROM #Data_FY19 d1
INNER JOIN #Data_FY19 d2
ON d1.Product_Code = d2.Product_Code
WHERE d1.rwno <> d2.rwno
AND d1.RCV_Total = ABS(d2.RCV_Total)
AND d1.RCV_Total + d2.RCV_Total = 0
AND d1.rwno IN
(
SELECT rwno
FROM #maxOfeach m
WHERE m.rn = 1
AND m.Product_Code = d1.Product_Code
);
SELECT *
FROM #Data_FY19;
DROP TABLE #Data_FY19;
DROP TABLE #maxOfeach;