Tsql 在一组中仅排名前10名
我有以下最终选择声明:Tsql 在一组中仅排名前10名,tsql,group-by,Tsql,Group By,我有以下最终选择声明: 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 @Worktabl
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
然而,我只希望看到每个portfolioID的前10名。我该如何确保为每个分组的PortfolioID获得前10名?您可以使用CTE。我会用排名代替,但是你可能会得到超过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
你可以使用CTE。我会用排名代替,但是你可能会得到超过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
谢谢你的回复。工作完美,没有考虑使用CTE。感谢您的回复。工作完美,没有考虑使用CTE。