首页 > 解决方案 > 在 SQL 中执行减法/寻找平衡

问题描述

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

当前表:

类型 账户 数量
2021 1 实际的 美国广播公司 20
2021 1 实际的 定义 30
2021 1 实际的 40
2021 1 实际的 X 7
2021 1 实际的 是的 3
2021 1 实际的 最后 105

预期的

类型 账户 数量
2021 1 实际的 美国广播公司 20
2021 1 实际的 定义 30
2021 1 实际的 40
2021 1 实际的 X 7
2021 1 实际的 是的 3
2021 1 实际的 最后 105
2021 1 实际的 平衡 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 代表当前不构成数据库一部分的数千个小账户。

标签: sqlsql-servertsqlsubtraction

解决方案


如果我理解正确:

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;

是一个 db<>fiddle。


推荐阅读