Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]【请教】如何对某张成绩表按多规则进行排名?

jia  发表于:2016-04-07 12:20:27  
复制

 我想在ACCESS中对某张成绩表进行排名。
成绩表中有初试成绩和复试成绩,排名规则如下:
1.初试成绩不及格者不参与排名,按照考号升序排于表尾。

2.初试成绩合格者,按初试+复试总成绩降序排列,若有分数相同者,排名亦应相同。即:第1名:188分,第2名:186分,第2名186分,第4名,180分

3.输出结果中应有排名。

请问,该如何实现这样的效果?
成绩表示例

 

Top
杜超 发表于:2016-04-07 13:56:16
【Access示例】排名次(可按相同数字排序)[Access软件网]
http://www.accessoft.com/article-show.asp?id=10316

朱先生 发表于:2016-04-07 15:54:30

第1名:188分,第2名:186分,第2名186分,第4名,180分

只能排成第1名:188分,第3名:186分,第3名186分,第4名,180分.........

按附件中第1名:187分,第2名:186分,第3名184分,第4名,176分.第5名,173,第7名,170,第7名,170.........

这种结果与你的要求有差距

不好意思把结果上传

 第一题代码    SELECT a.考号, a.姓名, a.初试总分, Count(*) AS 排名
FROM 成绩表 AS a INNER JOIN 成绩表 AS b ON a.初试总分 <= b.初试总分
GROUP BY a.考号, a.姓名, a.初试总分
HAVING (((a.初试总分)>=60))
ORDER BY a.初试总分 DESC UNION SELECT 成绩表.考号, 成绩表.姓名, 成绩表.初试总分,"" AS 排名
FROM 成绩表
WHERE (((成绩表.初试总分)<60))
ORDER BY 初试总分 DESC;



网行者 发表于:2016-04-08 06:19:18
西出阳关无故人 发表于:2016-04-08 08:31:16

查询的方法(初试成绩不及格者参与排名,都是最后的名次.按照考号升序排于表尾).

第一个查询:

SELECT 成绩表.考号, 成绩表.姓名, 成绩表.复试总分, 成绩表.初试总分, IIf([初试总分]>=60,[初试总分]+[复试总分],0) AS 总分
FROM 成绩表
ORDER BY IIf([初试总分]>=60,[初试总分]+[复试总分],0) DESC;
第二个查询:

SELECT 第一个查询.考号, 第一个查询.姓名, 第一个查询.复试总分, 第一个查询.初试总分, 第一个查询.总分, DCount("*","第一个查询","总分>=" & [总分])-DCount("*","第一个查询","总分=" & [总分])+1 AS 排名
FROM 第一个查询
ORDER BY DCount("*","第一个查询","总分>=" & [总分])-DCount("*","第一个查询","总分=" & [总分])+1, 第一个查询.考号;





jia 发表于:2016-04-08 22:17:48

感谢楼上诸位的帮助。

杜超 的回答很有帮助,这似乎是一个德国人写的代码?感觉怪怪的。

谢谢朱先生,不过您的代码不能执行,提示JOIN语法有误。

网行者 的答案是正确的。

西出阳关无故人的答案有瑕疵,初试不及格者仍然要计算总分,不显示排位。但是这个答案比较简单,思路也很清晰,尤其是IFF,用的非常巧妙。



总记录:5篇  页次:1/1 9 1 :