SQL Partition By для расчета Net Value - PullRequest
0 голосов
/ 23 апреля 2020

Представьте себе систему заказов с несколькими заказами, имеющими стороны как Buy и Sell. Набор данных выглядит следующим образом

Sample Structure

Я хочу рассчитать значение Net, которое равно (Сумма всех сторон покупки - Сумма всех сторон продажи )

Ожидаемый результат:

Expected

В настоящее время я использовал Partition By для получения следующего вывода

SELECT 
[NAME]
,[Side]
,[Value]
,SUM([Value]) OVER (PARTITION BY [NAME],[Side]) as Net
FROM 
[Order]

Вывод:

enter image description here

Но я не понимаю, как вычесть значения и получить ожидаемый результат.

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете использовать оконные функции с условной логикой c

select
    t.*,
    sum(case side when 'B' then value when 'S' then -value end) 
        over(partition by name) net
from mytable t
...