首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 学生成绩记录排名次-----请教 [已结贴,结贴人:stzxxx]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 12:15:13 楼主
    我有一个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#的,请说的详细一点点,因为很菜刚学,谢谢大家,另外不知道我的数据库设计是不是科学,如果思路不对还请大家多多指出,谢谢!

    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 12:55:491楼 得分:1
    要不要在原来的数据表中添加一个名次的字段?
    不用,
    试试  select * form chengji order by fenshu desc
    通过DataSet得到数据集以后,做循环,插入到新表里面
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 13:00:032楼 得分:0
    order by 就行了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • usxue
    • 等级:
    发表于:2008-04-02 13:36:473楼 得分:1
    在程序中,先用select * form chengji order by fenshu desc 将数据放到一个DataTable中,
    然后在DataTable添加一个int列,再循环判断分数的名次,最后再插入到数据库中。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinjazz
    • 等级:
    发表于:2008-04-02 13:38:584楼 得分:1
    select *,(select count(*)+1 from 记录 where fenshu>a.fenshu) from 记录 a
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Liu_Qiang
    • 等级:
    发表于:2008-04-02 13:47:065楼 得分:1

    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


    这样就可以了,看看是不是你要的效果。手写没测试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 13:47:136楼 得分:1
    select * into newtable from chengji

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


    update newtable
    set  名次='第'+str(编号)+'名'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • usxue
    • 等级:
    发表于:2008-04-02 14:00:447楼 得分:1
    刚才测试了一下,这个方法不错:
    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
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 14:09:408楼 得分:1
    你的库不好
    成绩、课程、个人信息分开存放
    个人表(personid,姓名)
    课程表(courseid,名称)
    成绩表(personid,courseid,result)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-02 14:23:279楼 得分:1
    库名和字段名最好用英语写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 16:29:3910楼 得分:0
    引用 7 楼 usxue 的回复:
    刚才测试了一下,这个方法不错:

    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



    请问这个怎么用啊?我是学用C#的

    下面是排名(paiming.aspx.cs)的空文件,上面的代码怎样放到哪里?

    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.OleDb;

    public partial class _paiming : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    //非常感谢大家的指教
        }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 17:27:5011楼 得分:1
    你可以将他写的查询语句写成存储过程,然后在程式里调用存储过程就可以了,我试过了,用ID的识别名字,真的不错~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 22:25:2912楼 得分:0
    引用 11 楼 shinevi 的回复:
    你可以将他写的查询语句写成存储过程,然后在程式里调用存储过程就可以了,我试过了,用ID的识别名字,真的不错~~


    请问什么是“存储过程”?具体怎么写代码?我就是不会啊。。。。谢谢大家
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 22:36:2913楼 得分:1
    存储过程
    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
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 22:47:2714楼 得分:1
    如果是想在页面上显示查询的结果,在页面上放一个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(); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:00:3715楼 得分:1
    你可以将他写的查询语句写成存储过程,然后在程序里调用存储过程就可以了,我试过了,用ID的识别名字,真的不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:02:1616楼 得分:1
    如果不是很复杂的话 order by  fenshu 就OK了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:08:4117楼 得分:0
    该回复于2008-04-10 08:36:51被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:22:5318楼 得分:1
    这里很多人都忘了同分是当相同名次的...
    所以那些建临时表,然后用插入取ID是不可取的...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:30:2519楼 得分:1
    试试这个:
    SQL code
    select *,paiming=(select DISTINCT count(fenshu)+1 from chengji where fenshu>a.fenshu) from chengji a order by paiming
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:33:0420楼 得分:1
    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

    不好意思,刚才错了,这样看可不可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:33:5521楼 得分:1
    看那种排名才正确,呵呵,我自己都忘了...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:37:2822楼 得分:1
    第一种结果
    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

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-10 09:28:3823楼 得分:1
    存储过程同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>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fxxyz
    • 等级:
    发表于:2008-04-10 10:16:5524楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-11 09:02:4525楼 得分:0
    请问 23 楼的
    我用了你的23楼代码出现如下错误

    da.Fill(ds, "chengji");
    至少一个参数没有被指定值。

    请问是不是SQL语句错了?

    另外,原来在我的 chengji 表中并没有 paiming 字段,是不是要先加上去?

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-11 09:20:0026楼 得分:1
    select * form chengji order by fenshu
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-11 10:45:5727楼 得分:0
    我用了你的23楼代码出现如下错误

    da.Fill(ds, "chengji");
    至少一个参数没有被指定值。

    请问是不是SQL语句错了?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-15 08:37:5228楼 得分:0
    不好意思,前两天拍婚纱照去了,外景,不在本地~SQL是没有问题啦~
    你先检查一下using System.Data.SqlClient;有没有添加上去~
    然后确认chengji是你提供的表名,实际的表名是不是也是这个~
    至于那个排名嘛,那个是从表中抓出来的数据,没有实际的栏位,是不用添加的~
    如果还有问题,随时联络我~
    msn:elinexu@hotmail.com
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved