在 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.
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.