SQL:在每个相应记录上汇总2列的产品和显示

时间:2018-03-27 12:57:35

标签: sql

无法让SQL正确执行以下操作。我有一个包含以下内容的表:

ID |Serial# |Part #|Cost|Qty|
1  |ABC     |1     |100 | 1 |
2  |ABC     |2     |100 | 2 |
3  |ABC     |3     |100 | 1 |
4  |DEF     |1     |100 | 1 |
5  |DEF     |2     |100 | 1 |

我想添加第6列“总成本”,将“成本”乘以“数量”并对其求和,按序列号分组,然后将该值添加到每条记录中。这意味着,ID 1,2,3的“总成本”将为400,而ID 4,5则为200.

我想我需要做一个子查询来做总和,然后加入显示“Cost”和“Qty”的外部查询但是我一直收到错误因为我不能包含“Part#”子查询。

1 个答案:

答案 0 :(得分:2)

这是一个应该适用于任何数据库的方法:

SELECT t1.*, t2.total_cost
FROM yourTable t1
INNER JOIN
(
    SELECT Serial, SUM(Cost*Qty) AS total_cost
    FROM yourTable
    GROUP BY Serial
) t2
    ON t1.Serial = t2.Serial;

如果您的数据库具有分析函数,那么我们可以避免使用子查询:

SELECT t.*,
    SUM(Cost*Qty) OVER (PARTITION BY Serial) total_cost
FROM yourTable t;