读书人

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

发布时间: 2011-12-19 23:23:36 作者: rapoo

学生成绩记录排名次-----请教
我有一个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();            }        }} 


[解决办法]
你可以将他写的查询语句写成存储过程,然后在程序里调用存储过程就可以了,我试过了,用ID的识别名字,真的不错
[解决办法]
如果不是很复杂的话 order by fenshu 就OK了!
[解决办法]
这里很多人都忘了同分是当相同名次的...
所以那些建临时表,然后用插入取ID是不可取的...

[解决办法]
试试这个:

SQL code
select *,paiming=(select DISTINCT count(fenshu)+1 from  chengji where fenshu>a.fenshu) from chengji a order by paiming
[解决办法]
SQL code
select *,paiming=(select count(b.fenshu)+1 from  (select  DISTINCT fenshu from chengji where fenshu>a.fenshu) as b) from chengji a order by paiming
[解决办法]
看那种排名才正确,呵呵,我自己都忘了...
[解决办法]
第一种结果
2 lisi 88.001
4 chenliu 88.001
1 zhangsan 85.003
3 wangwu 76.004
第二种结果
2 lisi 88.001
4 chenliu 88.001
1 zhangsan 85.002
3 wangwu 76.003


[解决办法]
存储过程同13楼,对应程式14楼;
sql语句同20楼,对应程式如下:

aspx界面:
...
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="xingming" HeaderText="姓名" SortExpression="xingming" />
<asp:BoundField DataField="fenshu" HeaderText="分数" SortExpression="fenshu" />
<asp:BoundField DataField="paiming" HeaderText="排名" SortExpression="paiming" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
...

apsx.cs后台:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
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;

public partial class _paiming : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
GridView1_Bind();
}
}

private void GridView1_Bind()
{
string myconn = ConfigurationManager.ConnectionStrings["ConStr"].ToString();//web.config
SqlConnection conn = new SqlConnection(myconn);
conn.Open();
string sqlstr = "select xingming,fenshu,paiming='第'+convert(varchar(20),(select count(b.fenshu)+1 from "
+ "(select distinct fenshu from chengji where fenshu>a.fenshu)b))+'名' from chengji a order by paiming";
SqlDataAdapter da = new SqlDataAdapter(sqlstr,conn);
DataSet ds = new DataSet();
da.Fill(ds,"chengji");
GridView1.DataSource = ds.Tables["chengji"].DefaultView;
GridView1.DataBind();
}
}

web.config添加:
<connectionStrings>
<add name="ConStr" connectionString="Data Source=你的计算机名;Initial Catalog=你的数据库;Persist Security Info=True;User ID=数据库用户名;Password=数据库密码" providerName="System.Data.SqlClient"/>


</connectionStrings>
[解决办法]
select * form chengji order by fenshu
mark

读书人网 >asp.net

热点推荐