VB中读取access中的下列数据,注意是读取,然后按照分数段统计人数后,显示出来,由于是菜鸟很多不懂,希望能详细提供代码和说明,200分解决该问题,谢谢啦
我用的是ADO
学号 姓名 英语 数学 物理 化学 VB
200235882 张一山 81 75 63 58 87
200235883 张二山 81 75 63 58 87
200235882 张撒山 81 75 63 58 87
200235893 李的斯 71 87 73 78 97
200236004 王永民 91 58 83 88 67
200236016 李鹏 87 79 93 98 77
200236088 胡萝卜 51 95 69 76 37
200236099 赵来财 61 77 77 87 89
200236113 钱广 78 56 57 76 81
200236124 孙悟空 88 68 89 66 67
200236132 周全 21 75 73 87 57
200236152 吴大庆 96 85 93 67 17
200236182 赵无财 61 77 77 87 89
200235883 张说山 81 75 63 58 87
200235883 张的山 81 75 63 58 87
200235883 张飞山 81 75 63 58 87
200235891 李斯 71 87 73 78 97
200236000 王永民 91 58 83 88 67
200236010 李鹏 87 79 93 98 77
200236088 胡萝卜 51 95 69 45 37
200236099 赵来财 61 77 77 87 89
200236115 钱广 78 56 57 76 81
200236125 孙悟空 88 68 89 66 67
200236134 周全 21 75 73 87 57
200236152 吴大庆 96 85 93 67 17
200236181 赵无财 61 77 77 87 89
统计出分数段范围人数
范围 英语 数学 物理 化学 VB
>=90 3 5 .......
80-90 10 12 ......
....
....
<60 .... .... ....
然后就是算出每个人的加权平均分,进行排名~~~
谢谢各位大侠了~~我菜鸟在线等
[解决办法]
帮你顶
[解决办法]
1. 参考 我的读取access数据库的例子
2. 想一个sql写出来很困难,先给你一个参考,可能有点小问题
select a.*,b.*,c.*,d.*,e.*
from (select left(英语,1) + '0' as 英语,count(*) as times from aa group by left(英语,1) + '0') as a,
(select left(数学,1) + '0' as 数学,count(*) as times from aa group by left(数学,1) + '0') as b,
(select left(物理,1) + '0' as 物理,count(*) as times from aa group by left(物理,1) + '0') as c,
(select left(化学,1) + '0' as 化学,count(*) as times from aa group by left(化学,1) + '0') as d,
(select left(vb,1) + '0' as vb,count(*) as times from aa group by left(vb,1) + '0') as e
where a.英语=b.数学 and a.英语=c.物理 and a.英语=d.化学 and a.英语=e.vb
[解决办法]
不要急于用一个语句搞定~~
我的办法是把数据检索出来后再处理~~
1,把数据检索出来
2,放到一个MSHFlexGrid里,然后在MSHFlexGrid里多加一列--【平均分】
3,用一个循环,计算这一列的值,MSHFlexGrid 有排序的方法~~调用即可
参考代码:
With MSHFlexGrid1 .Cols = 7 .Col = 6 .Row = 0 .Text = "平均" For I = 1 To MSHFlexGrid1.Rows - 1 .Col = 6 .Row = I .Text = (CLng(IIf(.TextMatrix(I, 4) = "", 0, .TextMatrix(I, 4))) + CLng(IIf(.TextMatrix(I, 5) = "", 0, .TextMatrix(I, 4)))) * 0.5 NextEnd With
[解决办法]
http://download.csdn.net/source/1498324
[解决办法]
你的问题分2个sql完成:
1.一个统计分数段人数
select a.*,b.*,c.*,d.*,e.*
from (select left(英语,1) + '0' as 英语,count(*) as times1 from 成绩单 where 英语>=60 group by left(英语,1) + '0'
union select '0-59' as 英语,count(*) as times from 成绩单 where 英语<60 ) as a,
(select left(数学,1) + '0' as 数学,count(*) as times2 from 成绩单 where 数学>=60 group by left(数学,1) + '0'
union select '0-59' as 数学,count(*) as times from 成绩单 where 数学<60 ) as b,
(select left(物理,1) + '0' as 物理,count(*) as times3 from 成绩单 where 物理>=60 group by left(物理,1) + '0'
union select '0-59' as 物理,count(*) as times from 成绩单 where 物理<60 ) as c,
(select left(化学,1) + '0' as 化学,count(*) as times4 from 成绩单 where 化学>=60 group by left(化学,1) + '0'
union select '0-59' as 化学,count(*) as times from 成绩单 where 化学<60 ) as d,
(select left(vb,1) + '0' as vb,count(*) as times5 from 成绩单 where vb>=60 group by left(vb,1) + '0'
union select '0-59' as vb,count(*) as times from 成绩单 where vb<60 ) as e
where a.英语=b.数学 and a.英语=c.物理 and a.英语=d.化学 and a.英语=e.vb
输出:
英语人数数学人数物理人数化学人数vb人数
0-5940-5940-5920-5970-596
604602608604604
7047014708705702
80108048048088012
904902904902902
2. 每个人的平均
select 学号,姓名,sum(英语+数学+物理+化学+vb)/5 平均
from 成绩单 group by 学号,姓名
输出:
200236088胡萝卜125.000000
200235893李的斯81.200000
200236010李鹏86.800000
200236016李鹏86.800000
........
[解决办法]
select * from(select '>=90' as 范围,A.AA as 英语,B.BB as 数学,C.CC as 物理,D.DD as 化学,E.EE as VB from (select count(*) as AA from(select 学号,avg(英语) from T1 group by 编号 having avg(英语) >=90)) A,(select count(*) as BB from(select 学号,avg(数学) from T1 group by 编号 having avg(数学) >=90)) B,(select count(*) as CC from(select 学号,avg(物理) from T1 group by 编号 having avg(物理) >=90)) C,(select count(*) as DD from(select 学号,avg(化学) from T1 group by 编号 having avg(化学) >=90)) D,(select count(*) as EE from(select 学号,avg(VB) from T1 group by 编号 having avg(VB) >=90)) EUNION ALLselect '80-90' as 范围,A.AA as 英语,B.BB as 数学,C.CC as 物理,D.DD as 化学,E.EE as VB from (select count(*) as AA from(select 学号,avg(英语) from T1 group by 编号 having avg(英语) < 90 and avg(英语) >= 80)) A,(select count(*) as BB from(select 学号,avg(数学) from T1 group by 编号 having avg(数学) < 90 and avg(数学) >=80)) B,--……UNION ALL--……)
[解决办法]
应增加“平均分”的字段,生成后对以后的查询节约资源
[解决办法]
咋样了,lz也不给个信
[解决办法]
也看的出你在这方面已经有比较高的造诣 ,但是论坛里面什么样层次的人都有。完美并不属于每一个人,甚至包括我。很多人只要能解决单前的问题就已经是完美。。。但是您精益求精的精神小弟佩服。