2017-06-04 85 views
0

可以說我有一個表像這樣:的Oracle SQL計算方差

ID   TYPE   MONTH  AMOUNT   
--   ----   ----   ---   

abc  Forecast  1   150   
def  Forecast  1   225   
abc  Budget   1   140   
def  Budget   1   250   
abc  Forecast  2   190   
abc  Budget   2   450 

我想要做的是插入一條記錄每個那就是預測和預算各月間差價ID。所以,結果是這樣的:

ID   TYPE   MONTH  AMOUNT   
--   ----   ----   ---   

abc  Forecast  1   150   
def  Forecast  1   225   
abc  Budget   1   140   
def  Budget   1   250   
abc  Forecast  2   190   
abc  Budget   2   450 
abc  Variance  1   10 
abc  Variance  2   -260 
def  Variance  1   -25 

可能有人請提供SQL這一點。謝謝!

回答

2

您可以使用條件聚合來獲取差異並插入差異行。 (假設每個ID,一個月組合具有預測和預算行。如果不是這樣,在每個max添加else 0

insert into tbl(id,type,month,amount) 
select id,'Variance',month, 
max(case when type='Forecast' then amount end) - max(case when type='Budget' then amount end) 
from tbl 
group by id,month 
+0

甜..謝謝! – Scott

+0

有一個問題..你爲什麼要用'max'而不是'sum'? – Scott

+0

如果您有多行,您可以使用'sum'來減去總和值。因爲問題顯示每個ID一行,我使用'max'的月份......你也可以使用'sum'或'min'。使用'else 0'和'sum'。 –