如何聚合SQL Server 2000中的前5位数字
嗨,我面临着一个问题,学生可以有5门以上的科目,但我只需将5门科目的总分相加,学生的总分最高。一种表示任何学生获得的前五名总分总和的方法如何聚合SQL Server 2000中的前5位数字,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,嗨,我面临着一个问题,学生可以有5门以上的科目,但我只需将5门科目的总分相加,学生的总分最高。一种表示任何学生获得的前五名总分总和的方法 我该怎么办?请帮帮我。提前感谢。这里有一个查询,每个学生只能得到5个最高分: SELECT studentID, total_marks, row_number() OVER (PARTITION BY studentID, ORDER BY total_marks DESC) as rowN FROM studentTable
我该怎么办?请帮帮我。提前感谢。这里有一个查询,每个学生只能得到5个最高分:
SELECT studentID, total_marks,
row_number() OVER (PARTITION BY studentID, ORDER BY total_marks DESC) as rowN
FROM studentTable
WHERE rowN <= 5
因此,要得到总数:
SELECT studentID, SUM(total_marks)
FROM
(
SELECT studentID, total_marks,
row_number() OVER (PARTITION BY studentID, ORDER BY total_marks DESC) as rowN
FROM studentTable
WHERE rowN <= 5
) T
GROUP BY studentID
在SQL 2000中,您需要使用子选择来确定有多少具有相同ID的行具有较高的标记。然后筛选上面标记的行少于5行的行:
select
ID, Sum(Mark)
From Table1 t
where
(Select count(*)
from Table1 it
where it.id=t.id and it.mark>t.mark) <5
group by ID
很遗憾,行号不在sql-server-2000中。但是,您可以通过子查询获得相同的结果。希望这就是你想要的:
SELECT s.studentid, SUM(s.total_marks)
FROM students s
WHERE s.sub_code IN (SELECT TOP 5 sub_code
FROM students a
WHERE a.studentid = s.studentid
ORDER BY total_marks DESC)
GROUP BY studentid
谢谢你帮我Hogan…我收到错误消息,因为行号不是识别函数。我正在使用SQL Server2000@Jaan-此功能在SQL 2000中不可用。那个产品已经有15年的历史了。@Jaan然后你需要更好地定义你要找的东西。将所需结果添加到问题中。我们不是读心术的人。