【问题标题】:How to us Group By in SQL with a JOIN如何使用 JOIN 在 SQL 中进行 Group By
【发布时间】:2016-11-17 18:50:35
【问题描述】:

我想知道是否有人可以帮助我。我试图编写一个查询,它将所有订单详细信息行分组到每个产品。

    SELECT
      Line.NetAmount, Line.QtyDespatch, Line.QtyOrder,
      Line.Price, Line.Price * Line.QtySent AS 'Value'
      FROM  dbo.orderdetails line

   LEFT JOIN
   (
    SELECT  products.ProductID, products.CompanyID AS StockCompanyID,  
    products.StockCode  FROM dbo.products
   ) 
   Stock ON Line.ProductID = products.ProductID AND products.StockCompanyID = Line.CompanyID    

   WHERE Line.CompanyID = 1
   ORDER BY Stock.StockID ASC

我得到的结果是针对每个订单详细信息行单独进行的,但我想按每个产品 ID 进行分组,并将 (Line.Price * Line.QtySent) 作为每个产品的总和并显示每个产品一次。

我得到的结果是

PID     Net sent   qty      Price  Value
39044   12  0       5       2.4     0
39044   12  0       5       2.4     0
39044   12  0       5       2.4     0
39044   12  0       5       2.4     0

但我不想为每一行获取它,而是按产品获取所有行的累积值。基本上每种产品的累计总数

【问题讨论】:

  • 你能显示一些预期的结果吗,你的初始查询有 netamount、qtydespatch 和 qtyorder 不能在这个结果集中,因为我们不知道要使用哪一行的净数量等。或者你只是在结果集中的 ProductID 和 TotalPrice 之后?

标签: sql select join group-by


【解决方案1】:

您需要按 ProductId 分组,然后将 Line.Price 乘以 Line.QtySent 相加。你会想要这样的:

 SELECT p.ProductID, SUM(Line.Price * Line.QtySent) AS 'Value'
 FROM  dbo.orderdetails line   
 LEFT JOIN dbo.products p ON 
 Line.ProductID = p.ProductID AND p.CompanyID = Line.CompanyID       
 WHERE Line.CompanyID = 1
 GROUP BY p.ProductID 

【讨论】:

    【解决方案2】:

    您的描述听起来像这样的查询:

    SELECT od.ProductId, SUM(od.Price * od.QtySent) as total
    FROM  dbo.orderdetails od
    GROUP BY od.ProductId;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2013-03-12
      • 2014-11-14
      • 1970-01-01
      • 2014-08-31
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多