1

次の最終選択ステートメントがあります。

SELECT   ReportingDate
         ,PortfolioID
         ,IssueNme
         ,ROW_NUMBER() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC) AS [Rank]
         ,CAST(SUM(Percentage) AS DECIMAL(22,1)) AS [Weight]
FROM     @Worktable as WT
WHERE    WT.IssueType1 IN ('020')
GROUP BY WT.ReportingDate, WT.PortfolioID, WT.IssueNme
ORDER BY [Weight] DESC

ただし、ポートフォリオ ID ごとにランク付けされた上位 10 のみを表示したいと考えています。グループ化された PortfolioID ごとにトップ 10 を取得するにはどうすればよいですか?

4

1 に答える 1

1

を使用できますCTE。代わりに使用RANKしますが、各グループで 10 を超える可能性があります。

WITH CTE AS
(
  SELECT 
      RANK() OVER (PARTITION BY PortfolioID ORDER BY SUM(Percentage) DESC) AS [RANK]
  ,   ReportingDate
  ,   PortfolioID
  ,   IssueNme
  ,   CAST(SUM(Percentage) AS DECIMAL(22,1))  AS [Weight]
  FROM @Worktable as WT
  WHERE WT.IssueType1 IN ('020')
  GROUP BY WT.ReportingDate, WT.PortfolioID, WT.IssueNme
)
SELECT 
  ReportingDate
, PortfolioID
, IssueNme
, [Weight]
FROM CTE
WHERE [RANK] <= 10
ORDER BY [Weight] DESC

ランキング機能

于 2012-11-20T12:41:03.350 に答える