回 帖 发 新 帖 刷新版面

主题:求助 多列排名的代码怎么写,在线等待,非常感谢

我在做一个成绩表统计排名,就是每次考试的成绩排名,不知道多次考试排名的代码怎么写
学号 姓名 班级 总分 考试日期
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个回复)

沙发

用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  沈阳

在此我就不写怎么达到你要的显示方式了吧,这一点可以通过很多方法!

板凳

1.group by 日期
2.top 5 日期=日期
3.select  08/3/2 ,总分......where 名次<6......

3 楼

[quote]用SELECT语句分组(考试日期)即可:
select 考试日期,总分,姓名 FROM (你的数据表) GROUP BY 1 ORDER BY 1,2 INTO ;;;
;;;;
;;;
;;;
在此我就不写怎么达到你要的显示方式了吧,这一点可以通过很多方法![/quote]


呵,我就想知道怎么达到楼主想要的显示方式
我只会通过EXCEL  --!

4 楼

[quote]通过EXCEL[/quote]
王道

5 楼

[quote][quote]通过EXCEL[/quote]
王道[/quote]

哈哈[em1]

6 楼

如果使用嵌套查询 或者 分两部能不能实现我这样的排列方式,请各位高手帮忙想想办法,非常感谢你们

7 楼

呵,我是不会用代码实现你要求的显示方式,帮不了你
其实如果你急着要结果的话,可以导出到EXCEL ,在EXCEL里,很容易可以达到你要求的显示效果

8 楼

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 楼

[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朋友的回复很详细,我感觉有的看不大懂,能否做个解释

我来回复

您尚未登录,请登录后再回复。点此登录或注册