1

我有一张桌子

名字分数
萨马 12
普拉迪普 30
加里 90

我想从上表中获得前 2 名。这可以通过row_number()函数来​​完成。但它也应该适用于交叉应用。但是我下面提到的代码是给出所有行而不是前 2 分。

select abc.score
from #b as a
cross apply (
    select top 2 score
    from #b as 
    where b.name = a.name
    order by b.score desc
) as abc

你能告诉我上面的代码有什么问题吗?

4

1 回答 1

1

请检查以下查询是否适用于您的情况。

create table #b
(name varchar(30), score int);


insert into #b (name, score)
values ('mohit',12),
('pradeep',30),
('garry',42)


SELECT name,
       score,
       ROW_NUMBER() OVER(ORDER BY Score) RN
INTO #c
FROM #b

SELECT name,
       score,
       CONVERT(NUMERIC,score)/
       (SELECT SUM(score)
        FROM #c
        WHERE RN <= 2) Percentage
FROM #c
WHERE RN <= 2
于 2015-04-12T15:43:17.927 回答