Вот полный рабочий пример, который предполагает две таблицы гонки и кандидаты
Create Table #Race(Race_id int , MaxNoOfwinners int )
INSERT INTO #Race (Race_id , MaxNoOfwinners)
VALUES (1,3),
(2,3),
(3,1)
CREATE TABLE #Candidate (CandidateID int , Race_ID int , Total_Votes int )
INSERT INTO #Candidate (CandidateID , Race_ID , Total_Votes )
VALUES (1,1,5000),
(2,1,6700),
(1,2,100),
(2,2,200),
(3,2,300),
(4,2,400),
(1,3,42),
(2,3,22)
;WITH CTE as (
SELECT
RANK() OVER(PARTITION BY race_id ORDER BY race_id, total_votes DESC ) num,
CandidateID , Race_ID , Total_Votes
From
#Candidate)
SELECT * FROM cte inner join #Race r
on CTE.Race_ID = r.Race_id
and num <= r.MaxNoOfwinners
DROP TABLE #Race
DROP TABLE #Candidate
со следующими результатами
num CandidateID Race_ID Total_Votes Race_id MaxNoOfwinners
-------------------- ----------- ----------- ----------- ----------- --------------
1 2 1 6700 1 3
2 1 1 5000 1 3
1 4 2 400 2 3
2 3 2 300 2 3
3 2 2 200 2 3
1 1 3 42 3 1