我有一个存储过程返回一个如下所示的表:
ID | Type | Price | Description
-------------------------------
2 | J | 40.00 | Job
2 | F | 10.00 | Freight
2 | P | 20.00 | Postage
2 | F | 5.00 | Handling
7 | J | 50.00 | Job
7 | F | 20.00 | Freight
7 | P | 30.00 | Postage
7 | H | 5.00 | Handling
我希望它像这样返回表格:
ID | Type | Price | Description | FreightPrice
-----------------------------------------
2 | J | 40.00 | Job | 15.00
2 | F | 10.00 | Freight | 15.00
2 | P | 20.00 | Postage | 15.00
2 | F | 5.00 | Freight | 15.00
7 | J | 50.00 | Job | 20.00
7 | F | 20.00 | Freight | 20.00
7 | P | 30.00 | Postage | 20.00
7 | H | 5.00 | Handling | 20.00
预期结果会将每个唯一 ID 的总运费加总到其自己的列中,即 ID#2 总 FreightPrice 为 15.00 美元。
我尝试使用以下方法来获得该结果
FreightPrice = (SELECT SUM(Price)
FROM Table
WHERE Type = 'F' AND ID >= 2 AND ID <= 7)
问题是它返回 $35.00 的 FreightPrice,因为它对类型“F”的所有实例求和。
我是否需要将它们分成两个不同的子查询,或者有人知道用一个子查询实现此目的的方法吗?
最佳答案
你似乎想要一个窗口函数:
select t.*,
sum(case when description = 'freight' then price end) over (partition by id) as freightprice
from t;
关于sql - 将多行的值汇总到一个新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55692980/