Одной из идей было бы использование самореференсной JOIN
и отфильтровывание транзакций НДС в исходном наборе данных из Вашей таблицы.
Это предполагает пункт ON
, но его должно быть достаточно, чтобы получить Вы там, если это не совсем правильно:
WITH YourTable AS(
SELECT V.PropertyID,
V.OccupancyNumber,
V.TransCode,
V.TransDesc,
NULLIF(V.VATCode,'') AS VATCode,
TRY_CONVERT(date,V.[Date],3) AS [Date], --I hope [date] isn't a varchar, considering you display it in the format dd/MM/yy
V.Amount
FROM (VALUES(1234,1111,'GRNT','GarageRent','GVAT','24/01/20',10.00),
(1234,1111,'GVAT','GarageVAT','','24/01/20',2.00),
(1234,1111,'RENT','RENT','','24/01/20',20.00),
(1234,1111,'AMEN','AmenityCharge','AVAT','23/01/20',100.00),
(1234,1111,'AVAT','AmenityVAT','','23/01/20',20.00),
(4567,2222,'GRNT','GarageRent','GVAT','24/01/20',15.00),
(4567,2222,'GVAT','GarageVAT','','24/01/20',3.00),
(4567,2222,'RENT','RENT','','24/01/20',150.00),
(4567,2222,'AMEN','AmenityCharge','AVAT','23/01/20',200.00),
(4567,2222,'AVAT','AmenityVAT','','23/01/20',40.00))V(PropertyID,OccupancyNumber,TransCode,TransDesc,VATCode,[Date],Amount))
SELECT YT.PropertyID,
YT.OccupancyNumber,
YT.TransCode,
YT.TransDesc,
YT.VATCode,
YT.[Date],
YT.Amount + ISNULL(VAT.Amount,0) AS Amount
FROM YourTable YT
LEFT JOIN YourTable VAT ON YT.PropertyID = VAT.PropertyID
AND YT.VATCode = VAT.TransCode
WHERE YT.TransCode NOT LIKE '_VAT';