按两行分组,然后减去一个数字字段



假设我有这样的数据:

Table
Num1      Grp        Type          Cost
----      ---        ----          ----
12X       XXX        OLD             17
12X       XXX        NEW             23

我有很多行的数据,我正试图这样做,这只是的一个例子

我试图实现的是将这两者都汇总起来,并采用新旧成本列的差异

期望结果:

Table
Num1      Grp          Cost
----      ---          ----
12X       XXX          6

我使用的方法是2个CTE,比如:

WITH OLD as (Select * from table where type ='OLD')
, NEW as (Select * from table where type ='NEW')

然后

Select Num1, Grp, n.Cost - o.cost as Cost
from OLD o INNER JOIN NEW n on o.Num1 = n.Num1 and o.grp = n.group

然而,我实际拥有的两个CTE都是巨大的查询,有什么方法可以用更简单的方式实现吗?我觉得有两个CTE只是一种超负荷,我宁愿做得更整洁。

感谢您的帮助。

使用聚合:

select name, grp,
sum(case when type = 'NEW' then cost 
when type = 'OLD' then - cost
end)
from t
group by name, grp

最新更新