クライアントによる支払いの詳細が記載されたテーブルがあります。列を以下に示します。
ID, ClientID, Amount
ここで、クライアントIDごとに最大5つの金額グループの合計を見つけたいと思います。
見つけましたが、金額の合計DENSE_RANK()
を求めているのでうまくいきません。
ありがとう。
クライアントによる支払いの詳細が記載されたテーブルがあります。列を以下に示します。
ID, ClientID, Amount
ここで、クライアントIDごとに最大5つの金額グループの合計を見つけたいと思います。
見つけましたが、金額の合計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)
これはうまくいきますか?(私はあなたの問題を理解していない) トップ 5 の合計が必要な場合は、これです。クライアントごとSUM()
の金額を見つけるためのクエリは異なります。TOP 5
;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
してみてください:
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