Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何聚合SQL Server 2000中的前5位数字_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

如何聚合SQL Server 2000中的前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门以上的科目,但我只需将5门科目的总分相加,学生的总分最高。一种表示任何学生获得的前五名总分总和的方法


我该怎么办?请帮帮我。提前感谢。

这里有一个查询,每个学生只能得到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然后你需要更好地定义你要找的东西。将所需结果添加到问题中。我们不是读心术的人。