按两行分组并减去数字字段

Group by two rows and and subtract a numeric field

假设我有这样的数据:

   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