以下是引用aaaaaa在2015-9-13 19:34:59的发言:
我先来吧。明天再来下一个。
统计出 : 代码, 学校, 人数, 语文平均分, 语文优秀数, 语文及格数, 语文不及格数, 语文优秀率, 语文及格率, 最高分, 最低分, 平均分名次
选择 : 按语文平均分名次从高到低排列,其他的排列次序看注释。
请楼主老师斧正!谢谢您。
1. 构造样本数据,如果已经有了相对应的 DBF 文件,这一步可以省略 :
Create Cursor 成绩汇总表 ( 学校 C (10), 代码 C (6), 考生 C(6), 语文 I )
*!* 构造样本数据,假设有20个学校,每校500人,只统计语文成绩
gnPassMark = 72 && 语文及格分数
gnFineMark = 102 && 语文优秀分数
*
gnLower = 50 && 语文最低分
gnUpper = 120 && 语文满分分数
*
=Rand(-1)
For I = 1 To 20 && 有20个学校
For J = 101 To 600 && 每校500人
Insert Into 成绩汇总表 Values( ;
"第" + Transform(I, "@LR 99") + "中学", ; && 学校
Transform(I, "@LR 999999"), ; && 学校代码
Transform(Int(Rand( )* 100000), "@LR 999999"), ; && 考生编号
Int((gnUpper - gnLower + 1) * Rand( ) + gnLower) ) && 语文分数
Endfor
Endfor
2. 用一条 Select - SQL 语句 :
Select 代码, 学校, 人数, 语文 As 语文平均分, 语文优秀数, 语文及格数, ;
语文不及格数, 语文优秀率, 语文及格率, 最高分, 最低分, ;
( Select 1 + Count(语文) From (Select 代码, 学校, Count (*) As 人数, ;
Round(Avg(语文) + 0.00, 2) As 语文, ;
Sum(Iif(语文>=102,1,0)) As 语文优秀数, ;
Sum(Iif(语文>= 72,1,0)) As 语文及格数, ;
Sum(Iif(语文 < 72,1,0)) As 语文不及格数, ;
Round(Sum(Iif(语文>=102,1,0))/Count (*)*100, 2) As 语文优秀率, ;
Round(Sum(Iif(语文>= 72,1,0))/Count (*)*100, 2) As 语文及格率, ;
Max(语文) As 最高分, Min(语文) As 最低分 ;
From 成绩汇总表 Group By 代码, 学校) As t1 Where 语文 > T2.语文) As 平均分名次 ;
From (Select 代码, 学校, Count (*) As 人数, Round(Avg(语文) + 0.00, 2) As 语文, ;
Sum(Iif(语文>=102,1,0)) As 语文优秀数, Sum(Iif(语文>=72,1,0)) As 语文及格数, ;
Sum(Iif(语文 < 72,1,0)) As 语文不及格数, ;
Round(Sum(Iif(语文>=102,1,0))/Count (*)*100, 2) As 语文优秀率, ;
Round(Sum(Iif(语文>= 72,1,0))/Count (*)*100, 2) As 语文及格率, ;
Max(语文) As 最高分, Min(语文) As 最低分 ;
From 成绩汇总表 Group By 代码, 学校) As t2 ;
Order By 语文平均分 Desc && 按语文平均分名次从高到低排列
*!* 排列次序 :
*!* Order By 代码 Desc && 按学校代码从高到低排列
*!* Order By 代码 && 按学校代码从低到高排列
*!* Order By 语文平均分 Desc && 按语文平均分名次从高到低排列
*!* Order By 语文平均分 && 按语文平均分名次从高到低排列
*!* Order By 语文优秀分 Desc && 按语文优秀分名次从高到低排列
*!* Order By 语文优秀分 && 按语文优秀分名次从高到低排列
你说话怎么阴阳怪气的,我是菜鸟没你水平高行了吧。
另外你上面写的那么长,不和我的第一句实际是一码事吗,而且你这句少了及格率优秀率的排名。也就是说你也没法在一句里面实现。