成绩列表,排序,统计的sql语句的写法???(200分)

  • 主题发起人 主题发起人 zbwsh
  • 开始时间 开始时间
Z

zbwsh

Unregistered / Unconfirmed
GUEST, unregistred user!
我在开发成绩管理是定义了一个学生成绩表,如下:
WSH_CJGL_XSDKCJ
( LSH AUTOINCREMENT, //自动增量
KMMC ALPHA, //考试科目名称
DKCJ NUMBER, //单科成绩
KSXXBH INTEGER, //考试序号
XSLSH INTEGER //学生序号
);

表的内容:

lsh kmmc dkcj ksxxbh xslsh
1 语文 80 1 001
2 数学 85 1 001
3 英语 99 1 001
4 物理 73 1 001
5 语文 82 1 002
6 数学 81 1 002
7 英语 74 1 002
8 物理 88 1 002

9 政治 80 2 001
10 历史 85 2 001
11 化学 99 2 001

13 政治 82 2 002
14 历史 81 2 002
15 化学 74 2 002


目的为了实现有可能每次考试的考试科目会发生变化,便于记录。
但如何统计就麻烦了,如:列出学生的全部成绩表并进行排序(可
分别安单科,平均分,总成绩。
如:

考试序号 学生编号 语文 数学 英语 物理 平均分 总成绩

1 001 80 85 99 73 84.25 337


请问各位大侠有没有好办法用sql语句实现 ?
 
主要是你有没有定课目?在统计的时候你要统计哪几门?
如果是的话可以!
不是的话应用存储过程
有事QQ:44868052
 
是不是只显示语文,数学,英语,物理这四科的.
 
如果科目固定,好办.
 
按条件取出,然后写入一个新表。如你要的结构:

考试序号 学生编号 语文 数学 英语 物理 平均分 总成绩

这样无论课程如何变,都可以正确列出。当然,结构也可根据学生所修课程改变而改变。
QQ:18283251.
 
我主要是想实现,每次考试当科目不固定是的统计列表,
如:理科统考时的科目和文科统考时的科目不会一样,
而平时考试的科目可能会少一些...
我用的记录表可以不管科目的变化。
统计也一样,我希望可以全部统计,也可以统计某次考试的几个科目。
 
同意使用存储过程,调用时在一个临时表中产生所有学生的成绩,按照你说的那个格式插入数据[:D][:D][:D][:D]
 
不可能通过固定的SQL来实际
但你可以通过程序来实验
1.select distinct KMMC from WSH_CJGL_XSDKCJ //选出有那些课目
2.生成SQL语句
select L1.XSLSH,L2.语文,..,Ln.数学,total from
(select distinct XSLSH from WSH_CJGL_XSDKCJ) as L1 left outer join
(select dkcj as 语文 from WSH_CJGL_XSDKCJ where kmmc='语文'group by XSLSH ) as L2 left outer Join
....
......
....
 
for i:=1 to 100
begin
studID:=i;
Adoquery.close;
Adoquery.sql.clear;
Adoquery.sql.add('select * from table1 where xslsh='+inttostr(i)'+' order by kmmc');
Adoquery.open;
j:=0;
total:=0;
while not Adoquery.eof do
begin
j:=j+1;
TmpArray[j]:=Adoquery.fieldbyname('dkcj').asinteger;
total:=total+tmpArray[j];
end;
Adoquery.close;
Adoquery.sql.clear;
Adoquery.sql.add('insert into TmpTable(bianhao......
....


end;

其他的你自己写吧,我没有时间了,不好意思[:D][:(]
 
to:xdf_hubei
我总不能为每次统计都建立一个表吧,全校有7个年级,每个年级约8个班呢[?][:(]
不过谢谢你的关心和帮助!![:)]
 
建立一个表,其他的只是更新其内容而已
 
to:xdf_hubei
主要是临时表不好确定,因为由于科目的多少会变化。
 
也许可以用sql的“procedure”做。在“where”条件后进行条件选择--
(case ... when "all" then ... else ... end) =
(case ... when "all" then "no" else ... end) and
{等号前为字段条件,后为数值条件}
在用一些数值函数来计算咯!!
 
to kyonee:
我用的是interbase 数据库,用case语句不知为什么报错[:(]
能否帮我写个例子??
 
请大家帮助[:)][:)][:)][:)][:)][:)][:)]
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
843
import
I
后退
顶部