2

我有以下方案(2个表):

客户(Id、Name)和销售(Id、CustomerId、Date、Sum)

如何选择以下数据?

1) 有史以来最好的客户(客户,在 Sum 列中具有 Max Total 值)

例如,我有 2 个表(分别为客户和销售):

id    CustomerName      
---|--------------
1  | First         
2  | Second 
3  | Third 



id  CustomerId  datetime     Sum
---|----------|------------|-----
1  | 1        | 04/06/2013 | 50
2  | 2        | 04/06/2013 | 60
3  | 3        | 04/07/2013 | 30
4  | 1        | 03/07/2013 | 50
5  | 1        | 03/08/2013 | 50
6  | 2        | 03/08/2013 | 30
7  | 3        | 24/09/2013 | 20

期望的结果:

CustomerName TotalSum
------------|--------
 First      | 150

2) 本年度各月最佳客户(同上但本年度各月)

谢谢。

4

2 回答 2

4

为有史以来最好的客户试试这个

SELECT Top 1 WITH TIES c.CustomerName, SUM(s.SUM) AS TotalSum
FROM Customer c JOIN Sales s ON s.CustomerId = c.CustomerId
GROUP BY c.CustomerId, c.CustomerName
ORDER BY SUM(s.SUM) DESC
于 2013-10-16T20:19:54.310 回答
1

一种选择是与聚合RANK()结合使用。SUM这将为您提供整体价值。

select customername,  sumtotal
from (
  select c.customername, 
    sum(s.sum) sumtotal,
    rank() over (order by sum(s.sum) desc) rnk
  from customer c
    join sales s on c.id = s.customerid
  group by c.id, c.customername
  ) t
where rnk = 1

此时按月和年分组应该是微不足道的。

于 2013-10-16T20:16:12.680 回答