另一个表中的多行(与另一个表相关)记录的总和

Posted

技术标签:

【中文标题】另一个表中的多行(与另一个表相关)记录的总和【英文标题】:SUM of multi (relate to another table) rows record in another table 【发布时间】:2016-12-05 22:24:53 【问题描述】:

我有两个表,一个 tblOrder 和 tblOrderDetail 表。

tblOrderDetail 包含以下行:

OrderDetailID  OrderID  Product  Quantity  UnitPrice  Discount   Total

    1            1        ABC      10      $240.00      10     $2,160.00 
    2            2        CDF      100     $200.00      10     $18,000.00
    3            3        GHI      200     $150.00       0     $30,000.00
    4            1        XYZ      40      $100.00       5     $3,800.00

我希望 sql 查询获取 tblOrder 中的 Subtotal 列,这是来自 tblOrderDetail 的相关 OrderID Total 的总和,如下所示:

OrderID     Sub Total
  1         $5,960.00  
  2         $18,000.00
  3         $30,000.00

我试试这个 sql 查询:

SELECT 
    OrderID
    ,(
        SELECT 
            SUM(((tblOrderDetail.UnitPrice) - (tblOrderDetail.UnitPrice * (tblOrderDetail.Discount / 100))) * (tblOrderDetail.Quantity)) 
        FROM 
            tblOrderDetail 
        WHERE tblOrderDetail.OrderID = tblOrder.OrderID
    ) AS [Sub Total] 
FROM 
    tblOrder

但它给出了这个

OrderID     Sub Total
  1         $0.00  
  2         $0.00
  3         $0.00

请注意,我希望 Sub Total 列是动态的,而不是 tblOrderDetail 表中 Total Column 的总和。

我希望有人能理解我所说的话,并希望能帮助我实现这一目标!

【问题讨论】:

为什么要使用方程式来查找总计,因为您的列中已经有字段 你想在计算总数后将结果集添加到 tblOrder 中吗? 正如我提到的,我有两个表 tblOrder 和 tblOrderDetail 我想在计算来自 tblOrderDetail 的值后将结果集(SubTotal)添加到 tblOrder 中,因为提到了我的查询,但它不起作用。 【参考方案1】:

使用 Group by Clause 与 SUM 聚合函数,

    Select *, sum(Total) as totalforOrder from ordertbl group by OrderID;

演示SQLFiddle

根据您的问题,这是一个相关查询

  SELECT 
tblOrder.OrderID
,(
    SELECT 
        SUM(((tblOrderDetail.UnitPrice) - (tblOrderDetail.UnitPrice * (tblOrderDetail.Discount / 100))) * (tblOrderDetail.Quantity)) 
    FROM 
        tblOrderDetail 
    WHERE tblOrderDetail.OrderID = tblOrder.OrderID
) AS SubTotal 

来自 tblOrder;

它在SQLFiddle 上运行良好

【讨论】:

如果你想用方程式计算总数,那么看看这个演示:sqlfiddle.com/#!9/fb22e8/10 正如我提到的,我有两个表 tblOrder 和 tblOrderDetail 我想在计算来自 tblOrderDetail 的值后将结果集(SubTotal)添加到 tblOrder 中提到我的查询,但它不起作用。 @FC3D 我已经为你添加了相关查询,它工作正常,但我必须说使用内部连接或分组子句来更快更高效地获得结果集 感谢它的工作我在查询中遇到了另一个问题,这就是它不工作的原因实际上我有很多字段的大表,这就是为什么它无论如何都不能工作谢谢你的帮助:)【参考方案2】:

你可以使用 Group by 来做到这一点

Select OrderID, sum(Total) as [Sub Total] from tblOrderDetail group by OrderID;

You can get more details here !

【讨论】:

以上是关于另一个表中的多行(与另一个表相关)记录的总和的主要内容,如果未能解决你的问题,请参考以下文章

如何通过将一个表中的 id 与另一个表匹配来选择和更新一个表中的记录?

将主表与另一个表中的所有记录进行比较,以得出主表的列值

SQL 表中如何让某条记录的某个属性值与另一个表中的某条记录的某个属性值相关联

SQL Server:交叉引用一个表中的多个列与另一个表中的多个列

如何将同一表中的一条记录与另一条记录关联?

计算一个表中与另一表中的条件匹配的记录