我有一个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(); } }}