标题:各位大侠,一个成绩表查询问题,我试了好几次不行。请你出手。
只看楼主
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
结帖率:95.65%
已结贴  问题点数:20 回复次数:6 
各位大侠,一个成绩表查询问题,我试了好几次不行。请你出手。
各位大侠,一个成绩表查询问题,我试了好几次不行。请你出手。
表cj。dbf
学号     姓名  语文  数学  物理 化学 生物
080101   张1    77   88     88   10   39
080101   张2    78   85     88   10   38
080201   李1    79   88     88   10   40
080205   李2    77   90     88   10   54
080301   王1    76   88     88   10   38
其中学号中08是年级  03是班  01是个人号码
生成这样的表,总分没问题,就是年级名次,班级名次和各科年级名次重复的不好算。物理、化学、生物、总分和语文、数学一样,排不开了,
学号     姓名  语文  语文年级名次 语文班内名次  数学 数学年级名次  数学班内名次   物理 化学 生物 总分
080101   张1    77       3            2          88        2           1           88   10   39
080101   张2    78       2            1          85        3           2           88   10   38

080201   李1    79       1            1         88        2           2           88   10   40
080205   李2    77       3            2         90        1           1           88   10   54

080301   王1    76       4            1         88        2           1           88   10   38
请各位大虾帮帮忙,小生万分感谢。
搜索更多相关主题的帖子: 成绩表 姓名 化学 
2011-03-22 06:31
autobot
Rank: 4
等 级:业余侠客
帖 子:71
专家分:202
注 册:2007-9-6
得分:10 
SELECT
 ccjj.学号
,ccjj.姓名
,ccjj.语文
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.语文 > ccjj.语文) + 1 AS 语文年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,4,2,'')+'%' AND cj.语文 > ccjj.语文) + 1 AS 语文班内名次
,ccjj.数学
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.数学 > ccjj.数学) + 1 AS 数学年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,4,2,'')+'%' AND cj.数学 > ccjj.数学) + 1 AS 数学班内名次
,ccjj.物理
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.物理 > ccjj.物理) + 1 AS 物理年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,4,2,'')+'%' AND cj.物理 > ccjj.物理) + 1 AS 物理班内名次
,ccjj.化学
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.化学 > ccjj.化学) + 1 AS 化学年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,4,2,'')+'%' AND cj.化学 > ccjj.化学) + 1 AS 化学班内名次
,ccjj.生物
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.生物 > ccjj.生物) + 1 AS 生物年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,4,2,'')+'%' AND cj.生物 > ccjj.生物) + 1 AS 生物班内名次

FROM cj AS ccjj
2011-03-23 16:58
autobot
Rank: 4
等 级:业余侠客
帖 子:71
专家分:202
注 册:2007-9-6
得分:10 
--对不起二楼的有一个数字写错了,这个是正确的。
SELECT
 ccjj.学号
,ccjj.姓名
,ccjj.语文
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.语文 > ccjj.语文) + 1 AS 语文年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,5,2,'')+'%' AND cj.语文 > ccjj.语文) + 1 AS 语文班内名次
,ccjj.数学
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.数学 > ccjj.数学) + 1 AS 数学年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,5,2,'')+'%' AND cj.数学 > ccjj.数学) + 1 AS 数学班内名次
,ccjj.物理
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.物理 > ccjj.物理) + 1 AS 物理年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,5,2,'')+'%' AND cj.物理 > ccjj.物理) + 1 AS 物理班内名次
,ccjj.化学
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.化学 > ccjj.化学) + 1 AS 化学年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,5,2,'')+'%' AND cj.化学 > ccjj.化学) + 1 AS 化学班内名次
,ccjj.生物
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,3,4,'')+'%' AND cj.生物 > ccjj.生物) + 1 AS 生物年级名次
,(SELECT COUNT(*) FROM cj WHERE cj.学号 LIKE STUFF(cj.学号,5,2,'')+'%' AND cj.生物 > ccjj.生物) + 1 AS 生物班内名次

FROM cj AS ccjj
2011-03-23 17:00
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
说语法错误。
2011-03-23 17:56
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
SELECT 学号,姓名,;
语文,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.语文< 语文) AS 语文名次,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.语文< 语文  and SUBSTR(学号,1,4)='0820') AS 语文班内名次,;
数学,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.数学< 数学) AS 数学名次,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.数学< 数学  and SUBSTR(学号,1,4)='0820') AS 数学班内名次,;
英语,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.英语< 英语) AS 英语名次,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.英语< 英语 and SUBSTR(学号,1,4)='0820') AS 英语班内名次,;
物理,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.物理< 物理) AS 物理名次,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.物理< 物理 and SUBSTR(学号,1,4)='0820') AS 物理班内名次,;
化学,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.化学< 化学) AS 化学名次,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.化学< 化学 and SUBSTR(学号,1,4)='0820') AS 化学班内名次,;
生物,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.生物< 生物) AS 生物名次,;
(SELECT COUNT(*)+1 FROM shiyan WHERE a.生物< 生物 and ;
SUBSTR(学号,1,4)='0820') AS 生物班内名次,总分, (SELECT COUNT(*)+1 FROM shiyan WHERE a.总分< 总分) AS 总分名次,(SELECT COUNT(*)+1 FROM shiyan WHERE a.总分< 总分 and SUBSTR(学号,1,4)='0820') AS 总分班内名次 FROM shiyan.dbf AS a WHERE SUBSTR(学号,1,4)='0820'
解决了
2011-03-23 20:42
autobot
Rank: 4
等 级:业余侠客
帖 子:71
专家分:202
注 册:2007-9-6
得分:0 
哦对,这个我没测试,因为没有表,那个加1应该放前面就对了。
你这样写以后执行会有问题,你没用%直接把数打上去了,以后编号变了,这语句就不能用了。

[ 本帖最后由 autobot 于 2011-3-24 08:36 编辑 ]
2011-03-24 08:35
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
说的对,谢谢。
2011-03-24 22:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-334368-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093822 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved