繁体   English   中英

SQL Server 2008中的查询问题

[英]Query issue in SQL Server 2008

我正在尝试开发的查询返回以下内容:

  1. 每种产品的销售总量
  2. 产品名称
  3. 已购买每种产品最大金额的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM