使用Northwind数据库和SQL Server的三个表之间的子查询

时间:2015-05-24 19:45:58

标签: sql sql-server subquery northwind

  1. [Orders] : OrderID(Primary Key), CustomerID
  2. [Order Details] : OrderID(Primary Key), ProductID(Primary Key), Discount
  3. [Customers] : CustomerID[Primary Key]
  4. 使用这三个表格,我想查询每个productID的最高折扣CustomerID。我需要ProductIDCustomerIDDiscount的列。我怎么解决这个问题?真的很感激各种帮助。

    我已尝试过以下脚本:

    select ProductID, a.customerID, 
        (select MAX(discount) 
         from [Order Details] 
         where a.CustomerID=c.customerID
        )
    from Orders a 
        join [Order Details]
            on a.OrderID=[Order Details].OrderID 
        join Customers c
            on a.CustomerID=c.CustomerID    
    order by customerID
    

1 个答案:

答案 0 :(得分:0)

以下查询将以最大折扣为每位客户返回productid。请注意,如果针对特定客户,您有多个可能具有最高折扣的产品,我想要退回,那么您需要将ROW_NUMBER()替换为DENSE_RANK()

  WITH CTE AS 
    (SELECT ProductID, 
           o.CustomerID,
           Discount,
           ROW_NUMBER() OVER(PARTITION BY o.CustomerID ORDER BY Discount DESC) Row_num
    FROM [Order Details] od INNER JOIN Orders o
         ON od.OrderID= o.OrderID
    )
    SELECT ProductID, 
           CustomerID,
         Discount
    FROM CTE
    WHERE Row_num = 1