从SQL中的JOIN获取数据
对不起,这个问题的混乱名称,这是我的第一个SQL问题。从SQL中的JOIN获取数据
有没有人知道如何获得产品最大数量的订单的OrderID
?
这是我的代码至今:
SELECT Products.ProductName, MAX([Order Details].Quantity), MAX(OrderID)
FROM Products
INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID
GROUP BY Products.ProductName
当我说我MAX(OrderID)
获得该产品出售,而不是实际的ID,其中该产品的最高数量被卖的最高的ID。
这是我第一个关于SQL的问题,对于任何信息缺乏抱歉,只是告诉我需要什么,我会添加它。提前致谢!
编辑:我使用的是SQL Server 2008中
SELECT Products.ProductName, [Order Details].OrderID, [Order Details].Qty
FROM Products
INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID
WHERE [Order Details].Quantity = (SELECT MAX(p.Quantity) FROM [Order Details] p WHERE p.ProductID = Products.ProductID)
注:这会给你多个结果的单品,如果你有多个订单,最大订货数量。
您可以使用分析功能是:
修订
SELECT ProductName, Quantity, OrderID
FROM ( SELECT Products.ProductName, [Order Details].Quantity, OrderID,
ROW_NUMBER() OVER(PARTITION BY Products.ProductName ORDER BY [Order Details].Quantity DESC) Corr
FROM Products
INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID) A
WHERE Corr = 1
这样,您将获得每个产品只有一个记录,这意味着,如果你有一个以上的订单具有相同最大数量,你只能得到一个结果。您可以在ORDER BY
上添加更多列(例如订购日期)以选择最新或最旧的列。如果您想获取与数量相关的所有记录,则可以使用RANK
而不是ROW_NUMBER
。
SELECT ProductName, Quantity, OrderID
FROM ( SELECT Products.ProductName, [Order Details].Quantity, OrderID,
RANK() OVER(PARTITION BY Products.ProductName ORDER BY [Order Details].Quantity DESC) Corr
FROM Products
INNER JOIN [Order Details] ON Products.ProductID = [Order Details].ProductID) A
WHERE Corr = 1
+1,但'RANK()'可能更合适。 – 2012-03-16 21:25:45
它的工作,但说实话,我只是一个开山人,我不明白这个代码的大部分。我道歉。 – 2012-03-16 21:28:22
但你如何处理关系?如果一个给定的产品有两个或更多数量相同的订单,这个查询不会只报告第一个订单吗? – Sparky 2012-03-16 21:28:27
当您尝试运行它时,或者只是返回了0条记录时,您是否收到错误消息? – kingcoyote 2012-03-16 21:06:51
如何决定在关系情况下报告哪个OrderId? – Sparky 2012-03-16 21:09:35
我收到错误的结果。我得到最高的ID,而不是按产品名称分组的MAX([Order Details] .Quantity)所在的实际ID。 – 2012-03-16 21:13:14