Sql Ms Access数据库相同分数的学生排名

Sql Ms Access数据库相同分数的学生排名,sql,ms-access,rank,Sql,Ms Access,Rank,我有一张这样的桌子: ### Table name: studentresult ### Name Cls Roll Mark result Rank Jubayer 10 1 600 Pass Jewel 10 2 620 Pass James 10 3 590 Pass Jemi 10 4 590 Pass Kalis 10 5 449 Fail Lelin 10 6 600 Pass Name

我有一张这样的桌子:

### Table name: studentresult ###
Name    Cls Roll Mark result Rank
Jubayer 10  1    600  Pass 
Jewel   10  2    620  Pass
James   10  3    590  Pass
Jemi    10  4    590  Pass
Kalis   10  5    449  Fail
Lelin   10  6    600  Pass
Name   Cls Roll Mark result Rank
Jubayer 10  1   600  Pass   2
Jewel   10  2   620  Pass   1
James   10  3   590  Pass   4
Jemi    10  4   590  Pass   5
Kalis   10  5   449  Fail  **
Lelin   10  6   600  Pass   3
我想自动生成学生的排名。排名取决于分数,分数越高意味着排名越高。如果两个或两个以上的学生有相同的分数,卷将决定相对排名较低的卷意味着更好的排名。最后,如果一个学生失败了,他将不会被考虑在排名中

在我的示例中,结果如下所示:

### Table name: studentresult ###
Name    Cls Roll Mark result Rank
Jubayer 10  1    600  Pass 
Jewel   10  2    620  Pass
James   10  3    590  Pass
Jemi    10  4    590  Pass
Kalis   10  5    449  Fail
Lelin   10  6    600  Pass
Name   Cls Roll Mark result Rank
Jubayer 10  1   600  Pass   2
Jewel   10  2   620  Pass   1
James   10  3   590  Pass   4
Jemi    10  4   590  Pass   5
Kalis   10  5   449  Fail  **
Lelin   10  6   600  Pass   3
如果有70名学生,这将创建70行


如果您有70名学生,这将创建70行。

在MS Access中,您可以使用相关子查询:

select sr.*,
       iif(sr.result = "Pass",
           (select count(*)
            from studentresult as sr2
            where sr2.result = "Pass" and
                  (sr2.Mark > sr.Mark or
                   sr2.Mark = sr.Mark and sr2.roll <= sr.roll
                  )
           ),
           NULL
       ) as ranking
from studentresult as sr;

请注意,这将使用NULL表示失败的缺少值。这比“**”方便得多。可以使用后者,但需要将数字转换为字符串,以便整个列都是字符串。NULL仅起作用。

在MS Access中,您可以使用相关子查询:

select sr.*,
       iif(sr.result = "Pass",
           (select count(*)
            from studentresult as sr2
            where sr2.result = "Pass" and
                  (sr2.Mark > sr.Mark or
                   sr2.Mark = sr.Mark and sr2.roll <= sr.roll
                  )
           ),
           NULL
       ) as ranking
from studentresult as sr;

请注意,这将使用NULL表示失败的缺少值。这比“**”方便得多。可以使用后者,但需要将数字转换为字符串,以便整个列都是字符串。空值正好有效。

您可以使用我的项目中的通用函数RowRank

代码太多,无法在此发布,请转到第5段。详细情况排名

例如:

有点棘手,因为标记按Desc排序,而滚动按Asc排序:

选择 studentresult.Name, 研究结果Cls, 学生成绩卷, 研究结果马克, 学生成绩及格, IIf[Pass]=“Pass”,行秩[Mark],-[Roll],从studentresult中选择*其中Pass='Pass',[Mark],-[Roll],2,空为秩 从…起 研究结果; 输出:


您可以使用我的项目中的通用函数RowRank

代码太多,无法在此发布,请转到第5段。详细情况排名

例如:

有点棘手,因为标记按Desc排序,而滚动按Asc排序:

选择 studentresult.Name, 研究结果Cls, 学生成绩卷, 研究结果马克, 学生成绩及格, IIf[Pass]=“Pass”,行秩[Mark],-[Roll],从studentresult中选择*其中Pass='Pass',[Mark],-[Roll],2,空为秩 从…起 研究结果; 输出:


我刚刚修改了戈登林诺夫先生的密码。尝试下面的查询

SELECT sr.*, IIf(sr.result="Pass",(select count(*)
            from Table1 as sr2
            where sr2.result = "Pass" and
                  (sr2.Mark*10000-sr2.roll >= sr.Mark*10000-sr.roll and sr2.roll = sr2.roll
                  )
           ),Null) AS ranking
FROM Table1 AS sr;

我刚刚修改了戈登林诺夫先生的密码。尝试下面的查询

SELECT sr.*, IIf(sr.result="Pass",(select count(*)
            from Table1 as sr2
            where sr2.result = "Pass" and
                  (sr2.Mark*10000-sr2.roll >= sr.Mark*10000-sr.roll and sr2.roll = sr2.roll
                  )
           ),Null) AS ranking
FROM Table1 AS sr;


答案是否适用于MS Access数据库?我想这是针对MSSQL服务器的。答案是否适用于MS Access数据库?我认为这是为MSSQL服务器。如果你使用和额外的列,那么你可以很容易地做到这一点。Extra column表示仅用于计算的辅助列。如果使用和Extra column,则可以轻松地进行计算。“额外列”表示仅用于计算的辅助列。我可以与您联系吗?我无法解决。请将此项目文件发送到我的电子邮件。电子邮件:jubayer。jewel@gmail.comCan我通过电子邮件与您联系。先生,我已经查过了。如果再出现两个相同的数字,则排名将显示0。这是个大问题。我能和你联系吗?我无法解决。请将此项目文件发送到我的电子邮件。电子邮件:jubayer。jewel@gmail.comCan我通过电子邮件与您联系。先生,我已经查过了。如果再出现两个相同的数字,则排名将显示0。这是一个大问题,它不能正常工作。参数被找到,并且不合格的学生也在排名中。这不是acceptable@Jewel . . . 不,不及格的学生不在排行榜上。这就是sr2.result=Pass所做的。@GordonLinoff不及格的学生没有排名,但重复分数排名是重复的。对于mark 590,排名显示为5,5。@Harun24HR。查询中有一个输入错误。关联条件只引用了一个表,而不是两个。@GordonLinoff我认为sr2中仍然存在拼写错误。这不能正常工作。参数被找到,并且不合格的学生也在排名中。这不是acceptable@Jewel . . . 不,不及格的学生不在排行榜上。这就是sr2.result=Pass所做的。@GordonLinoff不及格的学生没有排名,但重复分数排名是重复的。对于mark 590,排名显示为5,5。@Harun24HR。查询中有一个输入错误。关联条件仅指一个表,而不是两个。@GordonLinoff我认为sr2中仍然存在拼写错误。我可以通过电子邮件、messenger或fb与您联系吗?可以。harun24hr@gmail.comfacebook个人资料是Harun24hr我可以通过电子邮件、messenger或fb与您联系吗?是的,您可以。harun24hr@gmail.comfacebook的个人资料是Harun24小时