日期:2014-05-18  浏览次数:20561 次

学生成绩记录排名次-----请教
我有一个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,
     xingming
INTO #TEMP
FROM chengji ORDER BY fenshu  

 
SELECT 
     fenshu,
     xingming,
   mingci = '第'+str([ID])+'名'
FROM #TEMP

DROP #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 desc
select cj.*,'第'+cast(#t.id as varchar)+'名' from chengji cj
join #t on #t.fs=cj.fenshu
order by #t.id
drop table #t

------解决方案--------------------
你的库不好
成绩、课程、个人信息分开存放
 个人表(personid,姓名)
 课程表(courseid,名称)
 成绩表(personid,courseid,result)

------解决方案--------------------
库名和字段名最好用英语写
------解决方案--------------------
你可以将他写的查询语句写成存储过程,然后在程式里调用存储过程就可以了,我试过了,用ID的识别名字,真的不错~~
------解决方案--------------------
存储过程
SQL code

Create proc sp_SChengjiInfo
AS
CREATE #TEMP
(
    ID INT IDENTITY(1,1),
    fenshu  INT,
    xingming
    
)
SELECT 
     fenshu,
     xingming
INTO #TEMP
FROM chengji ORDER BY fenshu  

 
SELECT 
     fenshu,
     xingming,
   mingci = '第'+str([ID])+'名'
FROM #TEMP

DROP #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.Conn