分别将正值和负值相加

时间:2018-12-10 09:57:45

标签: sql

我有一张桌子:

NAME    MONEY
Jane    100  
Chris  -100  
Jane     50  
Ann     -10  
Jane    -25  
Ann      17

我想写一个查询来汇总数据,在一列中应该是正数或金钱,而另一列中只能是负数。输出应如下所示:

NAME    SUM_POSITIVE    SUM_NEGATIVE
Jane    150             -25
Chris   0               -100
Ann     17              -10

查询:

select name, sum(money) from TABLE where money>0 group by name
union 
select name, sum(money) from TABLE where money<0 group by name;

几乎显示了我想要的内容,但是结果具有重复的名称和两列而不是三列:

NAME    SUM
Ann     -10
Ann      17
Jane    -25
Jane    150
Chris  -100

请帮助我重写查询以更正输出。

2 个答案:

答案 0 :(得分:2)

您可以改为有条件聚合:

select name, 
       sum(case when money > 0 then money end) as SUM_POSITIVE,
       sum(case when money < 0 then money end) as SUM_NEGATIVE 
from TABLE
group by name;

答案 1 :(得分:1)

用例何时

 select name, sum(case when money>0 then money end) SUM_POSITIVE
,sum(case when money<0 then money end) SUM_NEGATIVE
from TABLE  group by name

您将获得重复的名称,因为case运算符仅合并所有列值都相同的行,因为Ann包含-10和17,这是不同的,因此使其重复