2016-10-08 101 views
1

自从我处理SQL以来已经有一段时间了。假设我有一个包含以下列的表格交易:公司,年份,价值。不同过滤的SQL列

我想创建总结每家公司总价值一个结果,但在一个专栏中,我想2015年和2016年等

Company | Total 2015 | Total 2016 | 

听起来很基本的,但我一直没能图出来。

我应该创建两个查询,每年一个?如果是这样,我怎样才能在以后加入这两个结果?

回答

3

下面是使用conditional aggregation一个选项:

select company, 
     sum(case when year = 2015 then value end) total2015, 
     sum(case when year = 2016 then value end) total2016 
from Transaction 
group by company 
+0

这是oracle 11g吗? –

+0

'条件聚合'应该可以与大多数数据库一起工作... – sgeddes

+0

它的工作原理,谢谢。 –

2

这就是所谓有条件的聚集。

select 
    company, 
    sum(case when year = 2015 then value else 0 end) as sum2015, 
    sum(case when year = 2016 then value else 0 end) as sum2016 
from transaction 
group by company 
order by company; 
-2

如果计算逻辑有点复杂,则将其推送到用户定义的函数。

提示:

SELECT company, f_total(2015) total_2016, f_total(2016) total_2016; 

在这里,你只写一个函数f_total()是引入口一年参数。

+0

这真的是一个糟糕的建议。 –

+0

那么,编写一个聚合自定义函数也可能很复杂;-)无论如何,这个函数当然也应该把'value'作为参数。 –