SQL - 对在不同列中共享值的行进行分组

时间:2017-05-25 14:08:56

标签: mysql sql

我有一个包含以下字段的表

SalesOrderID RelatedOrderID Amount
1            0              5.00
2            1              1.00
3            0              3.00
4            0              20.00
5            4              10.00

我正在寻找一个查询,该查询将返回由原始总数和RelatedOrderID总数组成的销售订单总额。

SalesOrderID NewAmount
1            6.00
4            30.00

希望有意义......请提出任何问题。我知道这是一个令人困惑的情况!

谢谢,

麦克

3 个答案:

答案 0 :(得分:0)

您可以使用union all然后聚合::

select SalesOrderID, sum(amount) as amount
from ((select SalesOrderID,  amount from t) union all
      (select RelatedSalesOrderID, amount from t where RelatedSalesOrderID > 0)
     ) tt
group by SalesOrderID;

答案 1 :(得分:0)

为此,你必须使用类似的东西

SELECT
    least(o.SalesOrderId,r.SalesOrderId) AS SalesOrderId,
    o.Amount + r.Amount AS Amount
FROM
    orders o
JOIN orders r ON o.SalesOrderId = r.RelatedOrderID;

答案 2 :(得分:-2)

谢谢两位,自从发布以来我实际上已经解决了这个问题:

SELECT so1.SalesOrderID,
cast(SUM(so1.Amount+so2.Amount) as money) as NewAmount
FROM SalesOrder so1
JOIN SalesOrder so2
ON so1.SalesOrderID = so2.RelatedOrderID
GROUP BY so1.sorder_code