Access中的SQL排名语句
(2016-09-16 14:54:33)分类: 编程 |
一、原始表格(表名sc)
学号 | 班级 | 成绩 |
1 | 1 | 81 |
2 | 1 | 69 |
3 | 2 | 75 |
4 | 2 | 90 |
5 | 1 | 81 |
二、SQL排名语句
select *,Dcount("成绩","sc","成绩>"& 成绩)+1 as 名次 from
sc
其中用到了计数函数Dcount,语法如下:
DCount("要统计的字段名","数据所在的表/视图","条件")
本例中,Dcount函数中的条件是"成绩>"&
成绩,前一个带引号的成绩,是列的名字,&符号后面的不带引号的成绩,是当前学生的具体成绩。整个计算结果就是,返回成绩大于本人成绩的数目,再加1即得名次。
查询结果为
学号 | 班级 | 成绩 | 名次 |
1 | 1 | 81 | 2 |
2 | 1 | 69 | 5 |
3 | 2 | 75 | 4 |
4 | 2 | 90 | 1 |
5 | 1 | 81 | 2 |
三、有缺考情况的排序
假如前面所给例子中,学号为4的学生成绩为空,上面语句返回的结果是这个学生的名次为“#
错误”,怎样才能杜绝这个问题呢?可以用下面的语句:
select sc.*, DCount("成绩","sc","成绩>" &
成绩)+1as 名次 from
sc where
(IsNull([成绩])=False)
显然这里加了一个条件子句(上面红颜色的部分),结果中将不出现这个学生。
四、SQL按班级排名语句
有时候我们需要按班级排名,而不是年级的总排名,这时候就需要改变前面的Dcount函数中的条件:
select *,Dcount("成绩","sc","班级=" & 班级 & "
AND 成绩>"& 成绩)+1 as 班名次 from sc
查询结果为
学号 | 班级 | 成绩 | 班名次 |
1 | 1 | 81 | 1 |
2 | 1 | 69 | 3 |
3 | 2 | 75 | 2 |
4 | 2 | 90 | 1 |
5 | 1 | 81 | 1 |