[英]Query issue in SQL Server 2008
我正在尝试开发的查询返回以下内容:
CustomerID
这是我到目前为止:
SELECT DISTINCT
Products.ProductName,
SUM([Order Details].Quantity) as cant,
Orders.CustomerID
FROM
Products
INNER JOIN [Order Details]
ON Products.ProductID = [Order Details].ProductID
INNER JOIN Orders
ON [Order Details].OrderID = Orders.OrderID
WHERE
[Order Details].Quantity =
(
SELECT
MAX([Order Details].Quantity)
FROM
[Order Details]
WHERE
[Order Details].ProductID = Products.ProductID
)
GROUP BY
Products.ProductName, Orders.CustomerID
它没有给我预期的结果。
任何与表格内容或其他内容相关的信息,只需在评论中发布,我就会回答。
先谢谢您的帮助!
尝试这个,
;WITH orderCTE AS
( SELECT p.ProductName,
o.CustomerID,
SUM(od.Quantity) [Quantity]
FROM Products p
INNER JOIN [Order Details] od
ON od.ProductID = p.ProductID
INNER JOIN Orders o
ON o.OrderID = od.OrderID
GROUP BY p.ProductName, o.CustomerID
)
SELECT ProductName, [TotalQuantity], CustomerID
FROM ( SELECT CustomerID,
ProductName,
Quantity,
MAX(Quantity) OVER(PARTITION BY ProductName) [MaxQuantity],
SUM(Quantity) OVER(PARTITION BY ProductName) [TotalQuantity]
FROM orderCTE
) ord
WHERE MaxQuantity = Quantity
编辑
如果多个客户订购了相同产品的最大次数,则上述内容将返回重复项。 这可以通过使用下面的代码来避免,它将返回以分号分隔的客户ID列表,其中每个产品的订购次数最多为:
;WITH orderCTE AS
( SELECT p.ProductName,
o.CustomerID,
SUM(od.Quantity) [Quantity]
FROM Products p
INNER JOIN [Order Details] od
ON od.ProductID = p.ProductID
INNER JOIN Orders o
ON o.OrderID = od.OrderID
GROUP BY p.ProductName, o.CustomerID
), MaxOrdersCTE AS
( SELECT CustomerID,
ProductName,
Quantity,
MAX(Quantity) OVER(PARTITION BY ProductName) [MaxQuantity],
SUM(Quantity) OVER(PARTITION BY ProductName) [TotalQuantity]
FROM orderCTE
)
SELECT ProductName,
[TotalQuantity],
STUFF(( SELECT ';' + CONVERT(VARCHAR, CustomerID)
FROM MaxOrdersCTE c
WHERE ord.ProductName = c.Productname
AND MaxQuantity = Quantity
FOR XML PATH('')
), 1, 1, '') [CustomerIDs]
FROM MaxOrdersCTE ord
WHERE MaxQuantity = Quantity
尝试这个
SELECT DISTINCT
p.ProductName,
SUM(od.Quantity) as cant,
o.CustomerID
FROM
Products p
INNER JOIN [Order Details] od
ON p.ProductID = od.ProductID
CROSS APPLY (
SELECT
MAX(Quantity) Quantity
FROM
[Order Details]
WHERE
ProductID = p.ProductID
) mq
INNER JOIN [Order Details] fod
ON od.ProductID = fod.ProductID
AND mq.Quantity = fod.Quantity
INNER JOIN Orders o
ON fod.OrderID = o.OrderID
GROUP BY
p.ProductName, o.CustomerID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.