0

这是我的问题:

  1. 如果学生在任何科目中获得 49 分及以下的分数,他将不会被列入排名。

  2. 各科49分以上的学生按平均分排名

  3. 如果学生的平均成绩相同,他们的排名应该是平等的。

这是我的示例:

Table1                      
Student_ID  Name    Math    English   Science   Average 
   1        Apple    64       49        70      61.00   
   2        Boy      80       79        65      74.67   
   3        Cat      51       78        66      65.00   
   4        Dove     50       76        64      63.33   
   5        Eden     81       88        72      80.33   
   6        Fox      80       79        65      74.67   
   7        Golf     32       88        69      63.00   


Output                      
Student_ID  Name    Math    English   Science   Average    RANK
   1        Apple    64       49        70      61.00   
   2        Boy      80       79        65      74.67        2
   3        Cat      51       78        66      65.00        3
   4        Dove     50       76        64      63.33        4  
   5        Eden     81       88        72      80.33        1
   6        Fox      80       79        65      74.67        2
   7        Golf     32       88        69      63.00   

这是我的查询:

SELECT
    tmain.Student_ID,
    tmain.Name,
    tmain.Math,
    tmain.English,
    tmain.Science,
    tmain.Average,
    IIf(sub.RANK=0, Null, sub.RANK) AS RANK
FROM
    Table1 AS tmain
    LEFT JOIN
    (
        SELECT
            t1.Student_ID,
            t1.Average,
            (
                SELECT Count(*)
                FROM Table1 AS t2
                WHERE
                        t2.Math>49
                    AND t2.English>49
                    AND t2.Science>49
                    AND t2.Average>=t1.Average                    
            ) AS RANK
        FROM Table1 AS t1
        WHERE
                t1.Math>49
            AND t1.English>49
            AND t1.Science>49
    ) AS sub
    ON tmain.Student_ID = sub.Student_ID;

基于查询的输出:

Output                      
Student_ID  Name    Math    English   Science   Average    RANK
   1        Apple    64       49        70      61.00   
   2        Boy      80       79        65      74.67        3
   3        Cat      51       78        66      65.00        4
   4        Dove     50       76        64      63.33        5  
   5        Eden     81       88        72      80.33        1
   6        Fox      80       79        65      74.67        3
   7        Golf     32       88        69      63.00   

有人可以帮我解决这个问题吗,输出跳过了第二名

注意:Rank值不存储在表中。

4

1 回答 1

0

除非我误解了你,否则这会给你你所需要的:

SELECT tblStudents.StudentID, 
  tblStudents.SName, 
  tblStudents.Math, 
  tblStudents.English, 
  tblStudents.Science, 
  tblStudents.AvgScore, 
  tblStudents.Rank
FROM tblStudents
WHERE 
  (((tblStudents.Math)>49) AND 
   ((tblStudents.English)>49) AND 
   ((tblStudents.Science)>49))
ORDER BY tblStudents.AvgScore DESC;
于 2013-08-27T15:16:45.817 回答