0

我有 3 张明显的桌子,销售人员、订单和客户。在订单表中,我列出了所有订单和 SalesPersonID。

我想找到每个有超过 2 个订单的销售人员,并找到第二高订单的订单价值。如果我被要求找到最大订单价值,我可以完成此查询,但我似乎无法找到一种简单的方法来获得第二高的价值。

这里是新手,所以请放轻松。提前致谢。

在过去的 3 个小时里,我绞尽脑汁阅读有关 ROW_Number 和 Rank 的信息,但无法弄清楚。而且我确信有比编写我自己的自定义函数更简单的方法

Select distinct 
    Orders.SalesID,  MAX(Orders.OrderAmount), SalesPerson.SalesName   
From 
    Orders, SalesPerson
Where 
    Orders.SalesID = SalesPerson.SalesID
Group by 
    Orders.SalesID, SalesPerson.SalesName
Order by 
    MAX(Orders.OrderAmount) DESC
4

1 回答 1

2

你可以使用rank函数。对于每个销售人员,根据订单金额分配排名。最高金额分配为 1。依此类推,以降序排列。

select salesname, orderamount
from (
select
rank() over(partition by s.SalesName order by o.OrderAmount desc) as rnk 
,s.SalesName  
,o.OrderAmount
From Orders o
join SalesPerson s on o.SalesID = s.SalesID) t
where rnk = 2
于 2015-11-30T02:45:07.430 回答