2016-10-08 59 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'作爲參數。 –