在 SQL/finding 余额中执行减法

Performing subtraction in SQL/finding the balance

SQL table 这里:http://sqlfiddle.com/#!9/abe1da/9

当前 Table:

Year Month Type Accounts Amount
2021 1 Actual abc 20
2021 1 Actual def 30
2021 1 Actual ghi 40
2021 1 Actual X 7
2021 1 Actual Y 3
2021 1 Actual final 105

预计

Year Month Type Accounts Amount
2021 1 Actual abc 20
2021 1 Actual def 30
2021 1 Actual ghi 40
2021 1 Actual X 7
2021 1 Actual Y 3
2021 1 Actual final 105
2021 1 Actual BALANCE 5

SQL 尝试

select year, month, type,
case when accounts in ('abc') then 'abc'
 when accounts in ('def') then 'def'
 when accounts in ('ghi') then 'ghi'
 when accounts in ('X') then 'x'
 when accounts in ('Y') then 'Y'
 when accounts in ('final') then 'final'
else 'balance'
end as account_2
,
sum
(
(case when accounts in ('abc','def','ghi','final','x','y') then amount
else 
(
(case when accounts in ('final') then (amount))-
(case when accounts in ('abc','def','ghi','x','y') then -amount else 0))
)
from new

注意:余额 5 表示当前不构成数据库一部分的数千个小帐户。

如果我理解正确的话:

select Year, Month, Type, Accounts, Amount
from new
union all
select year, month, type, 'balance',
       (sum(case when accounts = 'final' then amount else 0 end) -
        sum(case when accounts <> 'final' then amount else 0 end) 
       )
from new
group by year, month, type;

Here 是一个 db<>fiddle.