设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4184|回复: 11
打印 上一主题 下一主题

[查询] 请教:同一查询下的多重排序问题

[复制链接]
跳转到指定楼层
1#
发表于 2015-3-23 09:42:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在的学生难,每天的学习压力很大,还要面临各种各样的考试。问题出现了,每每考试都要排名,单科排名,总分排名,班级排名,等等等等。我作为一名access路上的新手小小白,再一次遇到问题请大师出手相助,帮我解决目前挡住我前进的这只拦路虎。
作为新手我当然也不是遇见问题就求救,我在网上搜了很久,目前只能解决在一个查询中解决排名的问题,用这个方法解决某一个的单科排名或者总分排名都没有问题,稍作修改也可以算出班级排名,但是不能将几列内容分别排序。

当然,我也想过,麻烦点,把所有单科的排名查询都算出来,然后再根据这些查询汇总一个查询,只是这种排名的办法很慢,合到一起就更慢,甚至停止响应,崩溃重启。而且,我上传的例子只是其中的三门课,具体课程非常多,而且门课程的算法也非常多,所以最好的解决办法是能有一个办法能在一个查询中算出多列的排序。
如果有这样一段代码,或者这样的模块,各位前辈老师快告诉我吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2015-3-23 09:43:24 | 只看该作者
{:soso_e183:}{:soso_e183:}{:soso_e183:}
3#
发表于 2015-3-23 10:52:24 | 只看该作者
本帖最后由 todaynew 于 2015-3-23 14:28 编辑

数据表结构错误,按以下示例处理:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2015-3-23 11:49:42 | 只看该作者
本帖最后由 roych 于 2015-3-23 11:54 编辑

你就不能把每个科目成绩表放在一起吗?
注:如果科目比较多的话,可以考虑下面的设计:
学生 科目 成绩

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
 楼主| 发表于 2015-3-23 21:09:33 | 只看该作者
谢谢todaynew师父和roych老师的帮助,非常感谢,问题已经解决!
因为我设计的系统中设计太多的排序,所以roych老师的办法更好,掌握了这个函数,真可以说是事半功倍,等我大功告成之日我将发我的作品到论坛,到时候请两位老师和广大access爱好者批评指正。{:soso_e182:}
6#
 楼主| 发表于 2015-3-23 23:55:51 | 只看该作者
roych 发表于 2015-3-23 11:49
你就不能把每个科目成绩表放在一起吗?
注:如果科目比较多的话,可以考虑下面的设计:
学生 科目 成绩

roych老师,你写的rank函数真的很好用,但是我在使用的过程中发现这个只能针对于某一个表或查询,不能在所有的地方使用,这样我变更查询源 的时候就需要在复制一个你的函数,重新改个函数名字,更改模块中表的名字。这样虽然解决了问题,但是总感觉美中不足。不知可否让这个函数变成我在所有的查询中都能用呢?
7#
发表于 2015-3-24 09:09:02 | 只看该作者
本帖最后由 roych 于 2015-3-24 11:33 编辑
影子5555 发表于 2015-3-23 23:55
roych老师,你写的rank函数真的很好用,但是我在使用的过程中发现这个只能针对于某一个表或查询,不能在 ...

可以的。需要把表名称设置为变量就可以了,稍后再改下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2015-3-24 15:16:30 | 只看该作者
roych 发表于 2015-3-24 09:09
可以的。需要把表名称设置为变量就可以了,稍后再改下

问题圆满解决,谢谢!roych老师,你不但帮我写好了代码,还做了详细的批注,谢谢
9#
 楼主| 发表于 2015-3-25 20:48:48 | 只看该作者
roych 发表于 2015-3-24 09:09
可以的。需要把表名称设置为变量就可以了,稍后再改下

roych老师,我又有新问题了!
所谓圣意难测,伴君如伴虎。本来想收到领导表扬的,结果有好多数据和传统算法的结果对不上,所以又被领导批评了。
问题出在班序上,在对教师测评中有对班级学生前10名均分、前30名等均分的排名考核,我用的方法是分别计算前10、前30名的均分,但是由于排名公式是11345...的方法,所以前10名不一定是10个人的成绩,这样的话当人数超过10人的时候求的平均值就会比传统算法的低(传统算法是只算10个人,不考虑并列)。
所以我能想到的解决方向有两个:
第一:求平均值的时候算最高的10个值,而不是前10名的。
第二:更改班级排序的算法,让班序按12345...的方法排序。
遗憾,这两个方法我都不会,想了好久也不会
所以请roych老师再度出手相助,或者介绍更好的方法!
10#
 楼主| 发表于 2015-3-26 09:56:20 | 只看该作者
roych 发表于 2015-3-24 09:09
可以的。需要把表名称设置为变量就可以了,稍后再改下

搜了半天,也不知道是关键字不对还是怎么了,总是找不到解决办法,
找了一个SELECT DISTINCT TOP 10 *,但是这个返回的结果也不对,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 04:26 , Processed in 0.117039 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表