假设我有这样的数据:
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