求和列作为附加列sql

求和列作为附加列sql,sql,Sql,我正在尝试使用具有不同列的数据集。我正在考虑添加一列,根据订单ID提供每行的数量总和。请参见下面的输入和所需输出: +----+---------+-----+----------+-------+ | ID | OrderID | PID | Quantity | Total | +----+---------+-----+----------+-------+ | 1 | 10248 | 11 | 12 | 27 | +----+---------+-----+--

我正在尝试使用具有不同列的数据集。我正在考虑添加一列,根据订单ID提供每行的数量总和。请参见下面的输入和所需输出:

+----+---------+-----+----------+-------+
| ID | OrderID | PID | Quantity | Total |
+----+---------+-----+----------+-------+
| 1  | 10248   | 11  | 12       | 27    |
+----+---------+-----+----------+-------+
| 2  | 10248   | 42  | 10       | 27    |
+----+---------+-----+----------+-------+
| 3  | 10248   | 72  | 5        | 27    |
+----+---------+-----+----------+-------+
| 4  | 10249   | 14  | 9        | 49    |
+----+---------+-----+----------+-------+
| 5  | 10249   | 51  | 40       | 49    |
+----+---------+-----+----------+-------+
| 6  | 10250   | 41  | 10       | 60    |
+----+---------+-----+----------+-------+
| 7  | 10250   | 51  | 35       | 60    |
+----+---------+-----+----------+-------+
| 8  | 10250   | 65  | 15       | 60    |
+----+---------+-----+----------+-------+
| 9  | 10251   | 22  | 6        | 41    |
+----+---------+-----+----------+-------+
| 10 | 10251   | 57  | 15       | 41    |
+----+---------+-----+----------+-------+
| 11 | 10251   | 65  | 20       | 41    |
+----+---------+-----+----------+-------+
| 12 | 10252   | 20  | 40       | 65    |
+----+---------+-----+----------+-------+
| 13 | 10252   | 33  | 25       | 65    |
+----+---------+-----+----------+-------+
输入:

+----+---------+-----+----------+
| ID | OrderID | PID | Quantity |
+----+---------+-----+----------+
| 1  | 10248   | 11  | 12       |
+----+---------+-----+----------+
| 2  | 10248   | 42  | 10       |
+----+---------+-----+----------+
| 3  | 10248   | 72  | 5        |
+----+---------+-----+----------+
| 4  | 10249   | 14  | 9        |
+----+---------+-----+----------+
| 5  | 10249   | 51  | 40       |
+----+---------+-----+----------+
| 6  | 10250   | 41  | 10       |
+----+---------+-----+----------+
| 7  | 10250   | 51  | 35       |
+----+---------+-----+----------+
| 8  | 10250   | 65  | 15       |
+----+---------+-----+----------+
| 9  | 10251   | 22  | 6        |
+----+---------+-----+----------+
| 10 | 10251   | 57  | 15       |
+----+---------+-----+----------+
| 11 | 10251   | 65  | 20       |
+----+---------+-----+----------+
| 12 | 10252   | 20  | 40       |
+----+---------+-----+----------+
| 13 | 10252   | 33  | 25       |
+----+---------+-----+----------+
期望输出:

+----+---------+-----+----------+-------+
| ID | OrderID | PID | Quantity | Total |
+----+---------+-----+----------+-------+
| 1  | 10248   | 11  | 12       | 27    |
+----+---------+-----+----------+-------+
| 2  | 10248   | 42  | 10       | 27    |
+----+---------+-----+----------+-------+
| 3  | 10248   | 72  | 5        | 27    |
+----+---------+-----+----------+-------+
| 4  | 10249   | 14  | 9        | 49    |
+----+---------+-----+----------+-------+
| 5  | 10249   | 51  | 40       | 49    |
+----+---------+-----+----------+-------+
| 6  | 10250   | 41  | 10       | 60    |
+----+---------+-----+----------+-------+
| 7  | 10250   | 51  | 35       | 60    |
+----+---------+-----+----------+-------+
| 8  | 10250   | 65  | 15       | 60    |
+----+---------+-----+----------+-------+
| 9  | 10251   | 22  | 6        | 41    |
+----+---------+-----+----------+-------+
| 10 | 10251   | 57  | 15       | 41    |
+----+---------+-----+----------+-------+
| 11 | 10251   | 65  | 20       | 41    |
+----+---------+-----+----------+-------+
| 12 | 10252   | 20  | 40       | 65    |
+----+---------+-----+----------+-------+
| 13 | 10252   | 33  | 25       | 65    |
+----+---------+-----+----------+-------+
使用分组方式

尝试:

选择OrderID,按OrderID从表组中选择COUNTquantity as total;
因为您没有提到任何RDBMS,下面的查询几乎可以在大多数RDBMS中使用。查询所做的是计算子查询内的总数,并将结果加入原始表本身

SELECT  a.*,
        b.Total
FROM    TableName a
        INNER JOIN
        (
            SELECT  OrderID, SUM(Quantity) Total
            FROM    TableName
            GROUP   BY OrderID
        ) b ON a.OrderID = b.OrderID
这是一个例子

但是,如果您的RDBMS支持窗口函数,如SUM OVER,则可以简单地编写为

SELECT  a.*,
        SUM(Quantity) OVER (PARTITION BY OrderID) Total
FROM    TableName a

这里有一个。

StackOverflow希望您能这样做。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:谢谢你的朋友。完美地工作