У меня есть таблица ниже
PolicyNumber Premium Commission DataSource EffectiveDate
1 -2.25 -0.41 Internal 31/03/2018
1 160.26 29.14 Internal 31/03/2018
1 98.81 17.96 Internal 31/03/2018
2 361.24 65.67 Internal 31/01/2018
2 570.35 103.70 Internal 31/01/2018
2 -17.05 -3.10 Internal 31/01/2018
3 240.60 0.00 External 31/01/2018
3 196.64 0.00 External 31/01/2018
3 240.60 0.00 External 31/01/2018
3 196.64 0.00 External 31/01/2018
3 -240.60 0.00 External 28/02/2018
3 -196.64 0.00 External 28/02/2018
3 -240.60 0.00 External 28/02/2018
3 -196.64 0.00 External 28/02/2018
3 224.04 107.54 External 28/02/2018
3 176.97 84.95 External 28/02/2018
4 504.00 0.00 External 31/01/2018
4 68.33 0.00 External 31/01/2018
4 504.00 0.00 External 31/01/2018
4 68.33 0.00 External 31/01/2018
4 -504.00 0.00 External 28/02/2018
4 -68.33 0.00 External 28/02/2018
4 -504.00 0.00 External 28/02/2018
4 -68.33 0.00 External 28/02/2018
4 453.55 217.70 External 28/02/2018
4 61.44 29.49 External 28/02/2018
Мне нужно исключить все отрицательное значение премии, которое имеет такое же абсолютное значение из предыдущего. Например, PolicyNumber 3, Premium 240.60 и 196.64 корректируются на отрицательное значение премии -240,60 и -196,64. Мне нужно исключить PolicyNumber 3.
Я ожидаю получить конечный результат, как показано в таблице ниже.
PolicyNumber Premium Commission DataSource EffectiveDate
1 -2.25 -0.41 Internal 31/03/2018
1 160.26 29.14 Internal 31/03/2018
1 98.81 17.96 Internal 31/03/2018
2 361.24 65.67 Internal 31/01/2018
2 570.35 103.70 Internal 31/01/2018
2 -17.05 -3.10 Internal 31/01/2018
Я пробовал запрос ниже, но он не дает мне то, что я ожидаю
with cte as
( select distinct a.PolicyNumber, a.datasource, a.EffectiveDate from InsuranceTable a
inner join (select PolicyNumber, premium, EffectiveDate, datasource
from InsuranceTable) b on a.PolicyNumber = b.PolicyNumber
where a.premium < 0 and a.EffectiveDate = b.EffectiveDate and a.datasource = b.datasource and b.premium > 0 )
select x.PolicyNumber, x.premium, x.EffectiveDate, x.Commission, x.datasource from InsuranceTable x
inner join cte y on x.PolicyNumber = y.PolicyNumber and x.datasource = y.datasource
order by x.PolicyNumber, x.EffectiveDate
Я использую Microsoft SQL Server 2012. Спасибо всем за помощь.