我有一张桌子:
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
请帮助我重写查询以更正输出。
答案 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,这是不同的,因此使其重复