回 帖 发 新 帖 刷新版面

主题:不拆分表,如何实现班内序号的填写

一个表,包含全年级学生的成绩,也有相应的班级编号,如果先按班级编号将各班的学生取出来再排序,然后填写班内序号,虽然可行,但是比较麻烦。
有没有办法不提取出各班学生,让所有学生都在这个表中,但是要按该学生在这个班的成绩排序好,且填写他在这个班内的序号?
附:表的字段及部分记录如下:
班次    姓名    性别    编班成绩    班内序号
1    廖晓真    女    393.8    
1    孙海榕    男    391.1    
1    庄树真    女    393.8    
1    谢婷婷    女    401.3    
1    曾晴晴    女    395.8    
1    陈小云    女    401.5    
    ……        ……(1班其他学生)
2    黄妙玲    女    396
2    余婉婷    女    398
2    张敏杰    男    405.5
2    叶真真    女    393.8
2    王青梅    女    401.6
2    陈婉婷    女    401.1
2    胡荣强    男    401.6
2    陈日亮    男    394.8

    ……        ……(2班其他学生)
3    庄晓云    女    395.5
3    陈特龙    男    395
3    李青兰    女    401
3    黄剑波    男    397.8
3    张娇玲    女    409.6
3    林锦灿    男    394.3
3    许湘湘    女    394
3    庄铭    男    397.3
3    汪小婷    女    406
3    陈蓉蓉    女    405.3
3    江艺彬    男    399.8
3    陈雪萍    女    401.8
3    陈叶基    男    399
3    庄青青    女    408.1
    ……        ……(3班其他学生)

4    许均豪    男    397.8
4    孙钦煌    男    392.3
4    黄冰冰    女    398.5
4    骆巧玲    女    401.8
4    王文龙    男    412.5
4    曾艳芳    女    405.1
4    辛冰冰    女    407.8
4    谢骆佳    女    406.1
4    陈艺芳    女    400.8
4    骆文境    男    399.8
4    黄经杰    男    395.1
4    张雪红    女    385.5
4    张伟群    女    394
4    王燕花    女    395.5
4    杨小强    男    408.6
4    卢伟杰    男    394.3
4    蔡柏    男    402.3
    ……        ……(4班其他学生)

5    郑汉杰    男    402.3
5    王江涛    男    411.1
5    张淑芬    女    405
5    苏银钦    男    399.8
5    苏艺    女    407.8
5    陈堃    男    398
5    骆贤亮    女    393.6
5    王冰冰    女    396.1
5    吴梅燕    女    400.8

    ……        ……(5班其他学生)

回复列表 (共14个回复)

11 楼

呵呵,再说明一点,上面的这个查询能够成功的还有一个重要因素,那就是同学的姓名没有重名的,否则就又不对了。同学姓名这里起到了主键的作用。

12 楼

[quote]当取:.cj<b.cj  忽略了真正的第一名 
5个班级少了5名
当取:.cj<=b.cj 时排序有了问题
同名均会往后排
望楼上两位高手能有解决办法,本论坛还有一位顶尖高手CBL518,不知能否看到本题。[/quote]

SELECT *,(select COUNT(*) from Stud a WHERE a.bh=b.bh AND a.cj>b.cj)+1 xh FROM Stud b order by bh,xh

这样同名好像不会往后排.

11楼 ilikefox说的主键问题,貌似可以这样:
select IDENTITY(int,1,1) as iid,bh,xm,cj into #Stud_New from Stud

然后根据iid再查询新建的表,没测试.
如有问题,抱歉.

13 楼

请参考本人的帖子
http://bbs.pfan.cn/post-279288.html


&&全市排名
UPDATE szcjk SET qspm=(select COUNT(a.bmh)+1 from szcjk as a WHERE a.zf>szcjk.zf)


&&县区排名
UPDATE szcjk SET xqpm=(select COUNT(a.bmh)+1 from szcjk as a WHERE a.zf>szcjk.zf AND a.xqdh=szcjk.xqdh)
ost-279288.html

14 楼

办法苯一点,但结果准确无误。如果编班成绩大于1000,把第一行的1000换成更大一点的数值。
INDEX ON 班次 + STR(1000 - 编班成绩, 7, 1) TO sy
GO TOP
DO WHILE !EOF()
  STORE 1 TO nI,nK
  nCj = 编班成绩
  cBC = 班次
  DO WHILE 班次 = cBC AND !EOF()
    IF 编班成绩 <> nCJ
      nCj = 编班成绩
      nK = nI
    ENDIF
    REPLACE 班内序号 WITH nK
    nI = nI + 1
    SKIP
  ENDDO 
ENDDO
SET INDEX TO

我来回复

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