主题:求助 多列排名的代码怎么写,在线等待,非常感谢
VFPXXXX
[专家分:0] 发布于 2008-10-12 18:36:00
我在做一个成绩表统计排名,就是每次考试的成绩排名,不知道多次考试排名的代码怎么写
学号 姓名 班级 总分 考试日期
0023 王亦 3班 456 2008/3/2
0221 刘力 3班 462 2008/3/2
0224 沈阳 3班 422 2008/3/2
0225 马达 3班 436 2008/3/2
0211 赵芳 3班 412 2008/3/2
0023 王亦 3班 556 2008/4/22
0221 刘力 3班 422 2008/4/22
0224 沈阳 3班 442 2008/4/22
0225 马达 3班 456 2008/4/22
0211 赵芳 3班 512 2008/4/22
0023 王亦 3班 455 2008/4/22
0221 刘力 3班 432 2008/5/22
0224 沈阳 3班 452 2008/5/22
0225 马达 3班 476 2008/5/22
0211 赵芳 3班 482 2008/5/22
这是统计后的显示结果
08/3/2 总分合 08/4/22 总分合 08/5/22 总分合
刘力 462 王亦 556 赵芳 482
王亦 456 赵芳 512 马达 476
马达 436 马达 456 沈阳 452
沈阳 422 王亦 455 刘力 432
赵芳 412 沈阳 442 王亦 415
请大家帮帮我要达到这样的显示结果代码怎么写,非常感谢
我的 QQ 374629945
回复列表 (共9个回复)
沙发
hw2007name [专家分:4790] 发布于 2008-10-12 20:18:00
用SELECT语句分组(考试日期)即可:
select 考试日期,总分,姓名 FROM (你的数据表) GROUP BY 1 ORDER BY 1,2 INTO CURSOR "一个临时表名"
只是不像你要求的排列方式,而是这样的:
日期 总分 姓名
08/3/2 462 刘力
08/3/2 456 王亦
08/3/2 436 马达
...
08/4/22 556 王亦
08/4/22 512 赵芳
08/4/22 456 马达
...
08/5/22 482 赵芳
08/5/22 476 马达
08/5/22 452 沈阳
在此我就不写怎么达到你要的显示方式了吧,这一点可以通过很多方法!
板凳
moz [专家分:37620] 发布于 2008-10-12 23:55:00
1.group by 日期
2.top 5 日期=日期
3.select 08/3/2 ,总分......where 名次<6......
3 楼
coffeenight [专家分:230] 发布于 2008-10-13 09:41:00
[quote]用SELECT语句分组(考试日期)即可:
select 考试日期,总分,姓名 FROM (你的数据表) GROUP BY 1 ORDER BY 1,2 INTO ;;;
;;;;
;;;
;;;
在此我就不写怎么达到你要的显示方式了吧,这一点可以通过很多方法![/quote]
呵,我就想知道怎么达到楼主想要的显示方式
我只会通过EXCEL --!
4 楼
moz [专家分:37620] 发布于 2008-10-13 17:36:00
[quote]通过EXCEL[/quote]
王道
5 楼
coffeenight [专家分:230] 发布于 2008-10-14 10:00:00
[quote][quote]通过EXCEL[/quote]
王道[/quote]
哈哈[em1]
6 楼
VFPXXXX [专家分:0] 发布于 2008-10-14 17:33:00
如果使用嵌套查询 或者 分两部能不能实现我这样的排列方式,请各位高手帮忙想想办法,非常感谢你们
7 楼
coffeenight [专家分:230] 发布于 2008-10-14 22:54:00
呵,我是不会用代码实现你要求的显示方式,帮不了你
其实如果你急着要结果的话,可以导出到EXCEL ,在EXCEL里,很容易可以达到你要求的显示效果
8 楼
fyyylyl [专家分:8550] 发布于 2008-10-16 16:11:00
Select 考试日期 From 成绩表 Group By 考试日期 Into Cursor listdate
cStr="("
Scan
cStr=cStr+"日期"+Substr(Dtos(考试日期),3,4)+" C(10),"+"总分"+Substr(Dtos(考试日期),3,4)+" N(4),"
Endscan
cStr=Left(cStr,Len(Alltrim(cStr))-1)+")"
Select 0
Create Table 新表 &cStr
Select 成绩表
Scan
cField1="日期"+Substr(Dtos(考试日期),3,4)
cField2="总分"+Substr(Dtos(考试日期),3,4)
Select 新表
Locate For &cField1=成绩表.姓名 Or Empty(&cField1)
If Eof()
Insert Into 新表(&cField1,&cField2) Values(成绩表.姓名,成绩表.总分)
Else
Replace &cField1 With 成绩表.姓名,&cField2 With 成绩表.总分
Endif
Select 成绩表
Endscan
Select 新表
Go Top
Browse
9 楼
VFPXXXX [专家分:0] 发布于 2008-10-21 02:58:00
[quote]Select 考试日期 From 成绩表 Group By 考试日期 Into Cursor listdate
cStr="("
Scan
cStr=cStr+"日期"+Substr(Dtos(考试日期),3,4)+" C(10),"+"总分"+Substr(Dtos(考试日期),3,4)+" N(4),"
Endscan
cStr=Left(cStr,Len(Alltrim(cStr))-1)+")"
Select 0
Create Table 新表 &cStr
Select 成绩表
Scan
cField1="日期"+Substr(Dtos(考试日期),3,4)
cField2="总分"+Substr(Dtos(考试日期),3,4)
Select 新表
Locate For &cField1=成绩表.姓名 Or Empty(&cField1)
If Eof()
Insert Into 新表(&cField1,&cField2) Values(成绩表.姓名,成绩表.总分)
Else
Replace &cField1 With 成绩表.姓名,&cField2 With 成绩表.总分
Endif
Select 成绩表
Endscan
Select 新表
Go Top
Browse[/quote]
非常感谢大家给我帮助,特别是fyyylyl朋友的回复很详细,我感觉有的看不大懂,能否做个解释
我来回复