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小时