2013-10-16 88 views
2

選擇行我有以下的方案(2臺):具有最大總值的SQL Server

客戶(ID,姓名)和 銷售(ID,客戶編號,日期,和)

如何選擇以下數據?

1)的所有時間(客戶,其在總和列最大總價值)

例如最好的客戶,我有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)本年度每個月的最佳客戶(同前一個,但每月本年度)

謝謝。

+1

你嘗試過的最好的客戶。你知道你需要首先「加入」表格嗎?然後你可以總結或彙總單個總和並找到最大值。請採取一些措施向我們展示您已經採取的措施。儘管對問題的描述很好。 – Harrison

+0

是的,我當然是先加入表格。我做到以下幾點: '選擇 Customer.Name, TotalSum FROM 客戶INNER JOIN (SELECT Sale.CustomerId, SUM(總和)作爲TotalSum 出售 GROUP BY Sale.CustomerId )臨時客戶.Id = temp.CustomerId' 我得到了兩列(CustomerName,TotalSum)和三行(對於每個Customer)的結果集。但是,在這一點上如何選擇客戶與Max TotalSum? – Sanek

回答

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 
+2

這是如何計算'sum'的?你正在總結客戶ID字段?更不用說'max(customerid)'訂購... ...這將始終返回最高的客戶ID ... – user2480596

+0

對不起,是的你是對的,我修好了。 –

+1

看起來更好。關係怎麼樣?假設這不是問題,這將是更簡單的解決方案。 – user2480596

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 

通過月份和年份分組,這應該是在這一點微不足道的。