DB2选择group by和sum基于另一列

时间:2014-03-27 19:36:55

标签: sql db2

我有以下情况:

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;

2 个答案:

答案 0 :(得分:2)

我已在中测试了您的查询,并产生了预期效果。

您的查询

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;

测试 - http://sqlfiddle.com/#!4/0b8cb/1

test- http://sqlfiddle.com/#!2/0b8cbd

测试 - http://sqlfiddle.com/#!15/0b8cb/1

请确认您的表格中的数据与您在问题中显示的内容相符。

答案 1 :(得分:0)

我在DB2(9.7 LUW)中测试了一个执行求和的查询,它也有效。

您的查询似乎没有任何问题;它必须是别的东西。