2017-06-04 82 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'。 –