У меня есть таблица, содержащая список сделок:
Security ; Quantity ; Price ; Consid
1. IBM ; +1,000 ; 20 ; -20k
2. IBM ; +2,000 ; 22 ; -44k
3. IBM ; -1,000 ; 30 ; +30k
4. IBM ; -2,000 ; 20 ; +40k
5. IBM ; -2,000 ; 20 ; -20k
Таким образом, PnL - это, как правило, сумма столбца Consid, поэтому до добавления сделки № 5 значение PnL было бы + 6k.
После того, как была добавлена сделка № 5, это показывает, что PnL -14k, что на самом деле не отражает то, где мы стоим.
Что мне хотелось бы, так это какой-нибудь способ отфильтровать незамкнутые сделки? Таким образом, сделка №5 будет допущена к сумме только тогда, когда мы добавим в таблицу покупку 2 тыс. Акций IBM.
Моя первоначальная попытка была:
set @Ret = @Ret + isnull((SELECT SUM(GC) AS GS
FROM (SELECT SUM(GrossConsid) * - 1 AS GC
FROM Trades AS CT
WHERE (SpecialCond = 'Prop') AND (SettType <> 'Futures') AND (TrdDt <= @Date) AND (TrdDt >=@StartDate) AND (Name = 'my_Comp')
GROUP BY ABS(Quantity)
HAVING (SUM(Quantity) = 0)) AS dt),0)
но я так и не понял, что существует граничное условие, при котором, если у меня есть сделки с количеством +5, + 5, -5, оно не считается, потому что (SUM(Quantity) = 0))
оценивается как ложное.
Есть идеи, как мне это исправить?
Спасибо, Крис