我必须找到每单位数量和价格的总价。如何以一种可以合并一个人的所有订单及其订购总价的方式来完成这项工作?
我是SQL的新手,不确定从哪里开始修复此问题。
SELECT DISTINCT Orders.OrderID, Customers.ContactName, Orders.OrderDate, [Order
Details].Quantity * [Order Details].UnitPrice
FROM Orders, Customers, [Order Details]
WHERE Orders.CustomerID = Customers.CustomerID
AND Orders.ShipCountry = 'Spain'
答案 0 :(得分:1)
我可以建议您做三件重要的事情:
JOIN
语法:不要用逗号分别编写表,对它们使用显式的JOIN,这样会迫使您此时编写它们的链接,以便以后阅读。您的尝试缺少订单和订单详细信息之间的链接,可能导致结果重复很多。GROUP BY
。每当您要应用诸如SUM
,MAX
,COUNT
之类的聚合函数时,(大多数)您将需要一组要分组在一起的列。这些列放在GROUP BY
子句中。如果不确定所获得的结果,请不要使用DISTINCT
。看来您使用DISTINCT
来掩盖订单和订单详细信息之间缺少的链接,因此它只列出唯一性,而不是您选择返回的实际数据。
SELECT
C.CustomerID,
C.ContactName,
O.OrderID,
O.OrderDate,
TotalPrice = SUM(D.Quantity * D.UnitPrice)
FROM
Orders AS O
INNER JOIN Customers AS C ON O.CustomerID = C.CustomerID
INNER JOIN [Order Details] AS D ON O.OrderID = D.OrderID
WHERE
O.ShipCountry = 'Spain'
GROUP BY
C.CustomerID,
C.ContactName,
O.OrderID,
O.OrderDate
答案 1 :(得分:0)
我认为您想像这样进行加入...
SELECT DISTINCT Orders.OrderID, Customers.ContactName, Orders.OrderDate,
[Order Details].Quantity * [Order Details].UnitPrice FROM Orders left join
Customers on Orders.CustomerID = Customers.CustomerID left join [Order
Details] on Orders.CustomerID = [Order Details].CustomerID where
Orders.ShipCountry = 'Spain'