我有以下情况:
ACCT_TABLE
ID|TYPE|AMT
--+----+---
A |CR | 5
A |DR | 5
B |CR | 2
B |CR | 4
B |DR | 2
B |DR | 2
C |CR | 1
C |CR | 1
我正在尝试构建一个产生以下结果的查询:
DESIRED RESULT
ID|BAL
--+---
A | 0
B | 2
C | 2
ACTUAL RESULT
ID|BAL
--+----
A | -10
B | -8
C | 2
我不确定如何根据TYPE
列中的值对数量值进行求和。
我有以下内容:
select id, sum(
case
when
type = 'CR'
then AMT
else -AMT
end
) as BAL
from acct_table
group by id;
答案 0 :(得分:2)
我已在mysql,postgresql,sql-server,oracle中测试了您的查询,并产生了预期效果。
您的查询
SELECT id
,SUM(CASE WHEN type = 'CR' THEN AMT
ELSE -AMT
END) AS BAL
FROM acct_table
GROUP BY id;
我的查询
SELECT id
,SUM(CASE WHEN type = 'CR' THEN AMT
ELSE ( AMT * -1 )
END) AS BAL
FROM acct_table
GROUP BY id;
oracle测试 - http://sqlfiddle.com/#!4/0b8cb/1
mysql test- http://sqlfiddle.com/#!2/0b8cbd
postgresql测试 - http://sqlfiddle.com/#!15/0b8cb/1
请确认您的表格中的数据与您在问题中显示的内容相符。
答案 1 :(得分:0)
我在DB2(9.7 LUW)中测试了一个执行求和的查询,它也有效。
您的查询似乎没有任何问题;它必须是别的东西。