Я не уверен, что понял, что вы говорите; пример, безусловно, поможет.
Тем временем: вы сказали, что:
- если buy_sell = buy, то price_per_share отрицателен
если buy_sell = sell тогда .. . что? Я понятия не имею, что означает написанное вами предложение:
тогда расширенная цена будет иметь знак минус (который скрыл поле?)
Это выглядит так же, как "купить" мне.
Кроме того, что такое "общая сумма продленной цены"?
Как я уже сказал: пример и - возможно - перефразировка вопроса помогут.
Тем временем, посмотрите, поможет ли это:
:block.display_item := case when :block.buy_sell = 'B' then -1
when :block.buy_seel = 'B' then 1
end * :block.quantity * abs(:block.price_per_share);
, который говорит: не обращайте внимания на знак price_per_share
(положительный или отрицательный) - всегда принимайте его абсолютное значение (это что делает функция abs
). Умножьте это на quantity
. Решите, какой знак использовать, проверив значение buy_sell
(я предположил, что покупка означает отрицательный , а продажа означает положительный ).
Если есть два задействуйте таблицы, объедините их и выделите в элемент блока (предполагая, что приведенный выше код имеет смысл); как то так:
select sum(case when t.buy_sell = 'B' then -1
when t.buy_sell = 'S' then 1
end * t.quantity * abs(t.price_per_share)
)
into :block.display_item
from transaction t join portfolio p on p.portfolio_number = t.portfolio_number
where t.portfolio_number = :block.portfolio_number;