我有一个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#的,请说的详细一点点,因为很菜刚学,谢谢大家,另外不知道我的数据库设计是不是科学,如果思路不对还请大家多多指出,谢谢!
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得到数据集以后,做循环,插入到新表里面
然后在DataTable添加一个int列,再循环判断分数的名次,最后再插入到数据库中。
(
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 #TEMPDROP #TEMP
这样就可以了,看看是不是你要的效果。手写没测试
update newtable
set 名次='第'+str(编号)+'名'
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)
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.OleDb;public partial class _paiming : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//非常感谢大家的指教
}
}
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 #TEMPDROP #TEMP
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();
}
}}
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.00 1
4 chenliu 88.00 1
1 zhangsan 85.00 3
3 wangwu 76.00 4
第二种结果
2 lisi 88.00 1
4 chenliu 88.00 1
1 zhangsan 85.00 2
3 wangwu 76.00 3
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>
我用了你的23楼代码出现如下错误da.Fill(ds, "chengji");
至少一个参数没有被指定值。请问是不是SQL语句错了?另外,原来在我的 chengji 表中并没有 paiming 字段,是不是要先加上去?
至少一个参数没有被指定值。 请问是不是SQL语句错了?
你先检查一下using System.Data.SqlClient;有没有添加上去~
然后确认chengji是你提供的表名,实际的表名是不是也是这个~
至于那个排名嘛,那个是从表中抓出来的数据,没有实际的栏位,是不用添加的~
如果还有问题,随时联络我~
msn:[email protected]