我有一张表,其中我有客户端支付的详细信息。列如下:Sql Server MAX的金额(金额)
ID, ClientID, Amount
现在我想找到5个客户端ID的最大总和金额组。
我发现DENSE_RANK()
但它不适合我,因为我想找到金额总和。
谢谢。
我有一张表,其中我有客户端支付的详细信息。列如下:Sql Server MAX的金额(金额)
ID, ClientID, Amount
现在我想找到5个客户端ID的最大总和金额组。
我发现DENSE_RANK()
但它不适合我,因为我想找到金额总和。
谢谢。
;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
SELECT
ID,
ClientID,
Amount
FROM
PaymentDetails
GROUP BY
ID
HAVING
Amount = SUM(Amount)
请尝试:
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
这是否对你的工作? (不知道我理解你的问题) 如果你想要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
由于OP正在寻找,所以没有得到最大值5 – 2013-01-07 07:31:11