【问题标题】:Trying to sum part of the rows试图对部分行求和
【发布时间】:2016-10-06 11:03:09
【问题描述】:

所以我有三张桌子 订单:

CustomerID,OrderID

订单详情;

OrderID,ProductId,UnitPrice,Quantity,Discount

和产品:

ProductID,ProductName

我需要将这两张表合并并创建一张:

[Orderd Details].CustomersID,Products.ProductName,FORMULA

公式是人们在这个产品上花了多少钱。所以我想我必须从这个产品的每个订单中总结 UnitPrice* Quantity*(1-Discount)。 可悲的是,我不知道该怎么做。我做的最好的是:

SELECT o.CustomerID,p.ProductName,SUM(od.Quantity*od.UnitPrice*(1-od.Discount)) as 'SKZ' 
FROM Customers as c, Orders as o,[Order Details] as od,Products as p 
WHERE (o.OrderID=od.OrderID AND p.ProductID=od.ProductID) 
GROUP BY od.ProductID ORDER BY o.CustomerID; 

但它不起作用。

【问题讨论】:

  • “它不起作用”几乎总是一个糟糕的错误描述。究竟什么不起作用,预期的输出是什么?举个例子。

标签: sql sum


【解决方案1】:

首先,学习明确的JOIN 语法。简单规则:永远不要FROM 子句中使用逗号。

其次,您应该在GROUP BY 中包含所有非聚合列:

SELECT o.CustomerID, p.ProductName,
       SUM(od.Quantity * od.UnitPrice * (1 - od.Discount)) as SKZ
FROM Orders as o JOIN
     [Order Details] od 
     ON o.OrderID = od.OrderID JOIN
     Products p 
     ON p.ProductID = od.ProductID
GROUP BY o.CustomerID, p.ProductName
ORDER BY o.CustomerID; 

【讨论】:

    • 1.感谢您如此快速的回答,对我有很大帮助。
    • 2.我对 SQL 真的很陌生,所以我真的很感谢除了解决我的问题之外,您还给了我一些建议。
    • 3.我有一个问题是'[Order Details] as od' 与 '[Order Details] od' 相同?我认为你缺少一些' ('或者不需要')'。我可以更改“skz”的格式吗?
  • 3.4. 是一个额外的) 5. 取决于你的数据库有字符串函数格式化数字
  • 再次感谢您,当我发帖时,我什至不知道我可以使用 GROUP BY column1,column2 。在这种情况下,我将尝试使用 Round() 函数。
猜你喜欢
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多