2013-01-07 98 views
0

我有一张表,其中我有客户端支付的详细信息。列如下:Sql Server MAX的金额(金额)

ID, ClientID, Amount 

现在我想找到5个客户端ID的最大总和金额组。

我发现DENSE_RANK()但它不适合我,因为我想找到金额总和

谢谢。

回答

0
;WITH totalSum 
AS 
(
    SELECT ClientID, SUM(Amount) totalAmount 
    FROM tableName 
    GROUP BY ClientID 
) 
SELECT ClientID, totalAmount 
FROM 
    (
     SELECT ClientID, totalAmount, 
       DENSE_RANK() OVER (ORDER BY totalAmount DESC) rn 
     FROM totalSum 
    ) s 
WHERE rn <= 5 
0
SELECT 
    ID, 
    ClientID, 
    Amount 
FROM 
    PaymentDetails 
GROUP BY 
    ID 
HAVING 
    Amount = SUM(Amount) 
+0

由于OP正在寻找,所以没有得到最大值5 – 2013-01-07 07:31:11

0

请尝试:

SELECT 
    ClientID, 
SUM(Amount) Amount 
FROM(
    SELECT ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY Amount DESC) DR, 
     ClientID, 
     Amount 
    FROM YourTable 
)x WHERE x.DR<=5 
GROUP BY ClientID 
ORDER BY ClientID 
0

这是否对你的工作? (不知道我理解你的问题) 如果你想要TOP 5总数,就是这样。 查找TOP 5的每个客户的金额的SUM()是不同的。

;WITH OrderingCTE AS 
(
    SELECT ID 
      ,ClientID 
      ,Amount = SUM(Amount) 
      ,rNum = ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY SUM(Amount) DESC) 
    FROM MyTable 
    GROUP BY ID 
      ,ClientID 
) 
SELECT * 
FROM OrderingCTE 
WHERE rNum <=5