主题:sywzs 再帮帮忙:多个成绩表中的最高分
yangshp06
[专家分:0] 发布于 2009-09-28 13:29:00
求助:
数据库CET中有四个文件,如图,分别是三个学期的成绩
如何在汇总表中快速将所有人各自三学期的最高分填入汇总表
(图图简图,实际工作有将近一千人,所以请别让我一个一个看了比较再慢慢填)
谢谢了哈!!
************************************************
我错了。第一次来这个论坛,才发现原来结贴后就不能回帖了!!
作者:sywzs曾回帖
SELECT 第一学期.*,第二学期.成绩 成绩2,第三学期.成绩 成绩3 FROM 第一学期,第二学期,第三学期 WHERE 第二学期.学号=第一学期.学号 and 第三学期.学号=第一学期.学号 INTO CURSOR tmp
SELECT *,sum(MAX(成绩,成绩2,成绩3)) 最高分 FROM tmp GROUP BY 姓名,学号,性别,成绩,成绩2,成绩3 INTO TABLE 汇总
是挺好的,不过发现有个不足:要是有人没参加某次的考试,那样,汇总表就没有他的成绩了!!
这该怎么处理呢???
回复列表 (共8个回复)
沙发
sywzs [专家分:5650] 发布于 2009-09-28 14:10:00
三个学期的记录数不完全相同吗?
板凳
Vii [专家分:1130] 发布于 2009-09-28 16:03:00
结构一致的表直接用union all合并就是了,再查询最大成绩.
类似:
select xm,xh,xb,max(cj) from (
select * from 第一学期
union all
select * from 第二学期
union all
select * from 第三学期
)a group by xm,xh,xb
3 楼
yangshp06 [专家分:0] 发布于 2009-09-28 17:32:00
恩,不一样。是四六级成绩,有些人有些考试没参加,我做图的忽略这个了,后面才想到
4 楼
sywzs [专家分:5650] 发布于 2009-09-29 05:28:00
假如三个学期的学号分别是(1,2,3)、(2,3,4)、(3,4,5)
以下用拼音代替汉字了
select xh,xm,xb from xq1 union ALL select xh,xm,xb from xq2 union ALL select xh,xm,xb from xq3 INTO CURSOR tmp1
SELECT DISTINCT xh,xm,xb FROM tmp1 INTO CURSOR tmp
SELECT tmp.*,xq1.cj,xq2.cj cj2,xq3.cj cj3 FROM tmp LEFT JOIN xq1 on xq1.xh=tmp.xh LEFT JOIN xq2 on xq2.xh=tmp.xh LEFT JOIN xq3 on xq3.xh=tmp.xh INTO CURSOR tmp1 READWRITE
REPLACE cj WITH 0 FOR ISNULL(cj)
REPLACE cj2 WITH 0 FOR ISNULL(cj2)
REPLACE cj3 WITH 0 FOR ISNULL(cj3)
SELECT *,sum(MAX(cj,cj2,cj3)) max FROM tmp1 GROUP BY xh,xm,xb,cj,cj2,cj3 INTO TABLE HZ
5 楼
Ilikefox [专家分:5770] 发布于 2009-09-29 11:25:00
就事论事的话,俺和2楼思路一致。
6 楼
yangshp06 [专家分:0] 发布于 2009-09-29 12:56:00
昨天晚上我试了2楼的思路。成功了
4楼的思路有时间再尝试一下
7 楼
lbscyb [专家分:4780] 发布于 2009-10-05 23:55:00
*-先取表结构,并构建空白“学期”字段
select xm,xh,xb,cj,space(2) as xq from 第一学期 where 1<>1 into cursor cTmp readwrite
*-导入数据
insert into cTmp(xm,xh,xb,cj,xq) select xm,xh,xb,cj,"1" as xq from 第一学期 where !dele()
insert into cTmp (xm,xh,xb,cj,xq) select xm,xh,xb,cj,"2" as xq from 第二学期 where !dele()
insert into cTmp (xm,xh,xb,cj,xq) select xm,xh,xb,cj,"3" as xq from 第三学期 where !dele()
*-获得数据
select xm,xh,xb,max(cj) as zgcj from cTmp where !dele() group by xm,xh,xb
以上代码需在VFP9.0中运行,未测试
通过其余网友的回答,可以看出你的数据库设计得很复杂,一个普通的查询都要费很大的劲
8 楼
dfwxj [专家分:270] 发布于 2009-10-08 00:25:00
2楼正解
再加上
into dbf tmp 子句,max(cj)加上as 三学期最高分
sele 汇总
appe from tmp &&自己要把字段名搞统一了
use in tmp
dele file tmp.dbf
我来回复