以下是引用dzy123在2013-10-17 09:20:20的发言:
SELECT MIN(总分) FROM (sele TOP VAL(thisform.text1.Text) 总分 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 总分 desc) t into arra zf
SELECT MIN(语文) FROM (sele TOP VAL(thisform.text1.Text) 语文 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 语文 desc) t into arra yw
SELECT MIN(数学) FROM (sele TOP VAL(thisform.text1.Text) 数学 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 数学 desc) t into arra sx
SELECT MIN(英语) FROM (sele TOP VAL(thisform.text1.Text) 英语 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 英语 desc) t into arra yy
SELECT MIN(政治) FROM (sele TOP VAL(thisform.text1.Text) 政治 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 政治 desc) t into arra zz
SELECT MIN(历史) FROM (sele TOP VAL(thisform.text1.Text) 历史 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 历史 desc) t into arra ls
SELECT MIN(地理) FROM (sele TOP VAL(thisform.text1.Text) 地理 FROM 高二全年级文 WHERE VAL(班级)>=25 ORDER BY 地理 desc) t into arra dl
作用是有许多班级查出各班总分及各科前10名的分数,我只能一个查询一个语句想用一个语句实现不知道能否
看你给出的语句,发现表文件结构有问题,不应该把每门课程作为一个字段,而应该象下图那样组织:
这样,做查询的时候就会方便很多。
不过,无论你如何组织数据,查询出各班总分和查询各科前10名分数都不能写在同一查询语句中。
我正好有一个表文件,与你结构相同,你参考一下吧:
查询总分:SELECT 班级,SUM(语文+数学+英语+自然常识+思想品德) 总分 FROM 二年级成绩 GROUP BY 班级 ORDER BY 班级
查询各班前10名(很复杂,你可以慢慢研究):
SELECT T6.名次,T5.班级,学号,姓名,语文+数学+英语+自然常识+思想品德 总分 ;
FROM 二年级成绩 T5 ;
JOIN ;
(
SELECT * FROM ;
(SELECT RECNO() 名次, * ;
FROM (SELECT DISTINCT 班级,语文+数学+英语+自然常识+思想品德 总分 ;
FROM 二年级成绩 WHERE 班级=[1] ORDER BY 2 DESC) T1 ;
UNION ALL ;
SELECT RECNO() 名次, * ;
FROM (SELECT DISTINCT 班级,语文+数学+英语+自然常识+思想品德 总分 ;
FROM 二年级成绩 WHERE 班级=[2] ORDER BY 2 DESC) T2 ;
UNION ALL ;
SELECT RECNO() 名次, * ;
FROM (SELECT DISTINCT 班级,语文+数学+英语+自然常识+思想品德 总分 ;
FROM 二年级成绩 WHERE 班级=[3] ORDER BY 2 DESC) T3) T4 ;
WHERE 名次<11) T6 ;
ON T5.班级=T6.班级 AND 语文+数学+英语+自然常识+思想品德=T6.总分 ;
ORDER BY T5.班级,名次
思路:(1)红色部分分别取出三个班的所有总分,并按由高到低的顺序排列。加关键字“DISTINCT”的目的是为了重复总分的人占相同名次;(2)蓝色部分是为了给每个总分加上名次。加名次的目的是为了方便以名次字段为参考截取前10名;(3)粉色部分用来截取各班前10名的分数;(4)黑色部分通过原表中各门课程相加后的总分与排名表中的总分进行比较,得出各班总分在前10名的学生信息。
[
本帖最后由 taifu945 于 2013-10-18 09:39 编辑 ]