【问题标题】:SQL Joint and Group two tables with SUM function使用 SUM 函数的 SQL 连接和分组两个表
【发布时间】:2017-07-25 20:47:18
【问题描述】:

所以我有两张桌子:

Products
Product ID | Quantity

OrdersLines 
Product ID | Amount (multiple lines with same ID)

我想加入两个表。结果应该是 - 产品 ID(分组依据)、数量和 OrdersLines 表中所有金额的总和。

到目前为止我得到了这个:

SELECT P.ProductID, P.Quantity, SUM(OL.Amount)
FROM atbl_Sales_Products AS P
LEFT JOIN atbl_Sales_OrdersLines AS OL ON OL.ProductID = P.ProductID 
GROUP BY P.ProductID

这会产生错误:

选择列表中的“atbl_Sales_Products.Quantity”列无效 因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句。

感谢您的帮助!

【问题讨论】:

  • 你不想SUM(P.Quantity)吗?我不会使用LEFT JOIN。请改用INNER JOIN

标签: sql-server tsql


【解决方案1】:

嗯,有两种写法,这取决于你想要什么

将数量添加到聚合中...

SELECT 
   P.ProductID, 
   SUM(P.Quantity), 
   SUM(OL.Amount)
FROM atbl_Sales_Products AS P
LEFT JOIN atbl_Sales_OrdersLines AS OL ON OL.ProductID = P.ProductID 
GROUP BY P.ProductID

将数量添加到分组中

SELECT 
   P.ProductID, 
   P.Quantity, 
   SUM(OL.Amount)
FROM atbl_Sales_Products AS P
LEFT JOIN atbl_Sales_OrdersLines AS OL ON OL.ProductID = P.ProductID 
GROUP BY P.ProductID, P.Quantity
--based on comment
HAVING SUM(OL.Amount) > P.Quantity

【讨论】:

  • 第二个对我有用。还有一件事,有没有办法只选择 Quantity > SUM(OL.Amount) 的这些行?
  • 当然,但这种逻辑对我来说没有多大意义。您想知道什么时候产品的总成本超过了它们的总成本?
  • Products 表就像一个仓库(数量 = 可用产品数量)。 OrdersLines(金额 = 当前订购/预留金额)。我只想选择一些仍然可用的行。
  • 哦,好吧,那就更有意义了。我会发布一个编辑
  • SELECT P.ProductID, P.Quantity, SUM(OL.Amount) FROM atbl_Sales_Products AS P 左加入 atbl_Sales_OrdersLines AS OL ON OL.ProductID = P.ProductID GROUP BY P.ProductID, P.Quantity HAVING P.Quantity > SUM(OL.Amount)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多