有一表:score
有五列:id(学号),name(姓名),score(分数),place(名次),semester(学期)
主键:id和semester
问题:已知数据id,name,score,semester
   问:如何实现自动把每个学生的名次(place)写入score表中。
如:name  score  semester
    张三: 87       1
    李四: 90       1
    王五: 91       1
    刘海: 90       1
通过什么方法可以实现表中内容如下:
    name   score   place semester
    张三: 87        3      1 
    李四: 90        2      1
    王五: 91        1      1
    刘海: 90        2      1
要求:c#实现或存储过程,要有代码哦。
如有其他的方法可以实现这些内容也可以,但请详细说明一下。
先谢谢大家了!在线等!
我很菜,但我一直在努力!

解决方案 »

  1.   

    --建立测试环境
    Create Table 表(name varchar(10),score varchar(10),semester varchar(10),place int)
    --插入数据
    insert into 表
    select '张三:','87','1','' union
    select '李四:','90','1','' union
    select '王五:','91','1','' union
    select '刘海:','90','1',''--测试语句
    update  表  set place =(select count(1)+1 from 表 where 表.score>a.score) from 表 a
    select * from 表

     
    --删除测试环境
    Drop Table 表
    /*--测试结果
    (所影响的行数为 4 行)
    (所影响的行数为 4 行)name       score      semester   place       
    ---------- ---------- ---------- ----------- 
    李四:        90         1          2
    刘海:        90         1          2
    王五:        91         1          1
    张三:        87         1          4(所影响的行数为 4 行)
    --*/
      

  2.   

    当然是1,2,2,4了====CSDN 小助手 V2.0 2005年10月16日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx
    下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!
    拒绝日货。
      

  3.   

    介紹兩種方法:
    1.先排序﹐再寫入
    DataTable tbl=new DataTable();
    tbl.Columns.Add("Name");
    tbl.Columns.Add("score");
    tbl.Columns.Add("id");
    tbl.Columns.Add("semester");
    tbl.Rows.add(new object[]{"张三",87,0,1});
    ...
    DataView dvw=new DataView(tbl);
    dvw.RowFilter="semester=1";
    dvw.Sort="score DESC";
    int score=101;
    int id=0;
    for(int i=0;i<dvw.count;i++)
    {
        if(((int)dvw[i]["score"])<score)
        {
           id +=1;
           score=(int)dvw[i]["score"];
         }
         dvw[i]["id"]=id;
    }
    tbl.acceptchanges();
    dvw.dispose();
    完成排序﹐將tbl的內容寫入數據庫就可以了
    (將DataTable中的數據寫入數據庫就不用多說了吧﹐如果確實不知道﹐看看C#關于數據庫的書補補基礎)2.先寫入數據庫﹐再排序
       入數據庫(數據庫中的結構與上面tbl的結構一樣)
    使用SQL語句更新:
    Update 表名 Set [id]=(SELECT Count(*)+1 From (SELECT DETINCT score,semester FROM 表名) TMP Where TMP.semester=表名.semester And TMP.score>表名.score) 
      

  4.   

    --建立测试环境
    Create Table 表(name varchar(10),score varchar(10),semester varchar(10),place int)
    --插入数据
    insert into 表
    select '张三:','87','1','' union
    select '李四:','90','1','' union
    select '王五:','91','1','' union
    select '刘海:','90','1',''--测试语句
    update  表  set place =(select count(distinct score)+1 from 表 where 表.score>a.score) from 表 a
    select * from 表

     
    --删除测试环境
    Drop Table 表
    /*--测试结果
    (所影响的行数为 4 行)
    (所影响的行数为 4 行)name       score      semester   place       
    ---------- ---------- ---------- ----------- 
    李四:        90         1          2
    刘海:        90         1          2
    王五:        91         1          1
    张三:        87         1          3(所影响的行数为 4 行)
    --*/
      

  5.   

    jinjazz(近身剪(充电中...))  的很详细了
    流星雨的先排序再写入的也行,不过推荐用 jinjazz的也就是流星雨的第二种