当前位置: 代码迷 >> ASP.NET >> 学生成绩记录排名次-请问
  详细解决方案

学生成绩记录排名次-请问

热度:10230   发布时间:2013-02-25 00:00:00.0
学生成绩记录排名次-----请教
我有一个Access数据表 chengji

字段
id 自动编号
kemu 科目
fenshu 分数
xingming 姓名

记录
id kemu fenshu xingming
1 语文 80 张三
2 语文 67 李四
3 语文 80 老五
4 语文 90 陈六
5 语文 52 刘七
6 语文 80 王八

请问如何进行排名?并将得到的名次写入到号一个表中去?

90 陈六 第1名
80 张三 第2名
80 老五 第2名
80 王八 第2名
67 李四 第5名
52 刘七 第6名

请问如何得到上面这样子的排名?要不要在原来的数据表中添加一个名次的字段?
我是学C#的,请说的详细一点点,因为很菜刚学,谢谢大家,另外不知道我的数据库设计是不是科学,如果思路不对还请大家多多指出,谢谢!



------解决方案--------------------------------------------------------
要不要在原来的数据表中添加一个名次的字段? 
不用,
试试 select * form chengji order by fenshu desc
通过DataSet得到数据集以后,做循环,插入到新表里面
------解决方案--------------------------------------------------------
在程序中,先用select * form chengji order by fenshu desc 将数据放到一个DataTable中,
然后在DataTable添加一个int列,再循环判断分数的名次,最后再插入到数据库中。

------解决方案--------------------------------------------------------
select *,(select count(*)+1 from 记录 where fenshu>a.fenshu) from 记录 a
------解决方案--------------------------------------------------------

SQL code
CREATE #TEMP(    ID INT IDENTITY(1,1),    fenshu  INT,    xingming    )SELECT      fenshu,     xingmingINTO #TEMPFROM chengji ORDER BY fenshu   SELECT      fenshu,     xingming,   mingci = '第'+str([ID])+'名'FROM #TEMPDROP #TEMP
------解决方案--------------------------------------------------------
select * into newtable from chengji

再在newtable里添加两列 一列叫作编号设为identity(1,1) 别一列假设叫做名次 数据类型为varchar


update newtable
set 名次='第'+str(编号)+'名'

------解决方案--------------------------------------------------------
刚才测试了一下,这个方法不错:
SQL code
create table #t (fs int,id int identity (1,1))insert into #t(fs) select distinct fenshu from chengji order by fenshu descselect cj.*,'第'+cast(#t.id as varchar)+'名' from chengji cjjoin #t on #t.fs=cj.fenshuorder by #t.iddrop table #t
------解决方案--------------------------------------------------------
你的库不好
成绩、课程、个人信息分开存放
 个人表(personid,姓名)
 课程表(courseid,名称)
 成绩表(personid,courseid,result)

------解决方案--------------------------------------------------------
库名和字段名最好用英语写
------解决方案--------------------------------------------------------
你可以将他写的查询语句写成存储过程,然后在程式里调用存储过程就可以了,我试过了,用ID的识别名字,真的不错~~
------解决方案--------------------------------------------------------
存储过程
SQL code
Create proc sp_SChengjiInfoASCREATE #TEMP(    ID INT IDENTITY(1,1),    fenshu  INT,    xingming    )SELECT      fenshu,     xingmingINTO #TEMPFROM chengji ORDER BY fenshu   SELECT      fenshu,     xingming,   mingci = '第'+str([ID])+'名'FROM #TEMPDROP #TEMP
------解决方案--------------------------------------------------------
如果是想在页面上显示查询的结果,在页面上放一个gridview
C# code
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class _paiming : System.Web.UI.Page {     protected void Page_Load(object sender, EventArgs e)     {         if (!this.IsPostBack)       {           Bind();       }    }         private void Bind()        {            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ToString()))            {                SqlCommand cmd = new SqlCommand();                cmd.CommandText = "sp_SChengJiInfo";   //指定存储过程名字                  cmd.CommandType = CommandType.StoredProcedure;  //指定类型为存储过程                  cmd.Connection = con;                SqlDataAdapter sda = new SqlDataAdapter(cmd);                DataSet ds = new DataSet();                sda.Fill(ds);                this.gvChengJi.DataSource = ds.Tables[0].DefaultView;                this.gvChengJi.DataBind();                ds.Dispose();            }        }}
  相关解决方案