有一表:score
有五列:id(学号),name(姓名),score(分数),place(名次),semester(学期)
主键:id和semester
问题:已知数据id,name,score,semester
问:如何实现自动把每个学生的名次(place)写入score表中。
如:name score semester
张三: 87 1
李四: 90 1
王五: 91 1
刘海: 90 1
通过什么方法可以实现表中内容如下:
name score place semester
张三: 87 3 1
李四: 90 2 1
王五: 91 1 1
刘海: 90 2 1
要求:c#实现或存储过程,要有代码哦。
如有其他的方法可以实现这些内容也可以,但请详细说明一下。
先谢谢大家了!在线等!
我很菜,但我一直在努力!
有五列:id(学号),name(姓名),score(分数),place(名次),semester(学期)
主键:id和semester
问题:已知数据id,name,score,semester
问:如何实现自动把每个学生的名次(place)写入score表中。
如:name score semester
张三: 87 1
李四: 90 1
王五: 91 1
刘海: 90 1
通过什么方法可以实现表中内容如下:
name score place semester
张三: 87 3 1
李四: 90 2 1
王五: 91 1 1
刘海: 90 2 1
要求:c#实现或存储过程,要有代码哦。
如有其他的方法可以实现这些内容也可以,但请详细说明一下。
先谢谢大家了!在线等!
我很菜,但我一直在努力!
Create Table 表(name varchar(10),score varchar(10),semester varchar(10),place int)
--插入数据
insert into 表
select '张三:','87','1','' union
select '李四:','90','1','' union
select '王五:','91','1','' union
select '刘海:','90','1',''--测试语句
update 表 set place =(select count(1)+1 from 表 where 表.score>a.score) from 表 a
select * from 表
--删除测试环境
Drop Table 表
/*--测试结果
(所影响的行数为 4 行)
(所影响的行数为 4 行)name score semester place
---------- ---------- ---------- -----------
李四: 90 1 2
刘海: 90 1 2
王五: 91 1 1
张三: 87 1 4(所影响的行数为 4 行)
--*/
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/10/16/504620.aspx
下载:http://szlawbook.com/csdnv2/csdnv2.rar为神六喝彩,向所有科技工作者致敬!
拒绝日货。
1.先排序﹐再寫入
DataTable tbl=new DataTable();
tbl.Columns.Add("Name");
tbl.Columns.Add("score");
tbl.Columns.Add("id");
tbl.Columns.Add("semester");
tbl.Rows.add(new object[]{"张三",87,0,1});
...
DataView dvw=new DataView(tbl);
dvw.RowFilter="semester=1";
dvw.Sort="score DESC";
int score=101;
int id=0;
for(int i=0;i<dvw.count;i++)
{
if(((int)dvw[i]["score"])<score)
{
id +=1;
score=(int)dvw[i]["score"];
}
dvw[i]["id"]=id;
}
tbl.acceptchanges();
dvw.dispose();
完成排序﹐將tbl的內容寫入數據庫就可以了
(將DataTable中的數據寫入數據庫就不用多說了吧﹐如果確實不知道﹐看看C#關于數據庫的書補補基礎)2.先寫入數據庫﹐再排序
入數據庫(數據庫中的結構與上面tbl的結構一樣)
使用SQL語句更新:
Update 表名 Set [id]=(SELECT Count(*)+1 From (SELECT DETINCT score,semester FROM 表名) TMP Where TMP.semester=表名.semester And TMP.score>表名.score)
Create Table 表(name varchar(10),score varchar(10),semester varchar(10),place int)
--插入数据
insert into 表
select '张三:','87','1','' union
select '李四:','90','1','' union
select '王五:','91','1','' union
select '刘海:','90','1',''--测试语句
update 表 set place =(select count(distinct score)+1 from 表 where 表.score>a.score) from 表 a
select * from 表
--删除测试环境
Drop Table 表
/*--测试结果
(所影响的行数为 4 行)
(所影响的行数为 4 行)name score semester place
---------- ---------- ---------- -----------
李四: 90 1 2
刘海: 90 1 2
王五: 91 1 1
张三: 87 1 3(所影响的行数为 4 行)
--*/
流星雨的先排序再写入的也行,不过推荐用 jinjazz的也就是流星雨的第二种