vb+access 求分数段的问题

laoshezhu 2008-11-21 01:09:41
请注意:是vb+access.
学校成绩有总表.要算出 各班 各个分数段的值.
表stumd中有字段 bj,zf.
表分段中有字段:600,590,580,570,560…………,400,小于400

最终结果:
bj 600 590 580………………
1 1 2 2
2
3
4
5
6

麻烦大家了。谢谢。求大家帮忙。我都整很长时间了。可就是整不对。
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2008-11-22
  • 打赏
  • 举报
回复
select bj,
sum(iif(zf>=600,1,0)) as '600',
sum(iif(zf>=590 and zf<600,1,0)) as '590',
sum(iif(zf>=580 and zf<590,1,0)) as '580'
from stumd
group by bj

这个吧?
laoshezhu 2008-11-22
  • 打赏
  • 举报
回复
谢谢你们.OK了.我最先真是这样写的.但是iif让我写错了.我还以为access不支持呢.哈哈.谢谢大家了.
laoshezhu 2008-11-22
  • 打赏
  • 举报
回复
对,就是你们说的意思。但我也写过。但好象VB+ACCESS 不支持sum(iif(zf>400,1,0) 。我再试试。试完。出来说结果。谢谢你们。
of123 2008-11-22
  • 打赏
  • 举报
回复
SELECT bj,
sum(iif(zf>=600,1,0)) AS [>=600],
sum(iif(zf>=590,1,0)) AS [>=590],
sum(iif(zf>=580,1,0)) AS [>=580],
sum(iif(zf>=570,1,0)) AS [>=570],
sum(iif(zf>=560,1,0)) AS [>=560],
sum(iif(zf>=550,1,0)) AS [>=550],
sum(iif(zf>=540,1,0)) AS [>=540],
sum(iif(zf>=530,1,0)) AS [>=530],
sum(iif(zf>=520,1,0)) AS [>=520],
sum(iif(zf>=510,1,0)) AS [>=510],
sum(iif(zf>=500,1,0)) AS [>=500],
sum(iif(zf>=490,1,0)) AS [>=490],
sum(iif(zf>=480,1,0)) AS [>=480],
sum(iif(zf>=470,1,0)) AS [>=470],
sum(iif(zf>=460,1,0)) AS [>=460],
sum(iif(zf>=450,1,0)) AS [>=450],
sum(iif(zf>=440,1,0)) AS [>=440],
sum(iif(zf>=430,1,0)) AS [>=430],
sum(iif(zf>=420,1,0)) AS [>=420],
sum(iif(zf>=410,1,0)) AS [>=410],
sum(iif(zf>=400,1,0)) AS [>=400],
sum(iif(zf<400,1,0)) AS [<400],
sum(1) AS [总计]
FROM stumd
GROUP BY bj;
laoshezhu 2008-11-21
  • 打赏
  • 举报
回复
stumd表中的数据:bj->班级,wl->表示文理,1为理,0是文.zf ->总分.要求的分段列就是这列.
下表是stumd表.要求的表,我也填一张,类似的要求. fenduan表是要求的.
stumd:
编号 xh kh xm bj tz wl ywj zf
5800 30101 5019 常乃升 1 0 0 1 586.9
5846 30147 5806 刘东阳 1 0 0 1 360
5847 30148 5830 魏伟 1 0 0 1 347
5848 30149 5735 程爱新 1 0 0 1 329
5849 30150 5915 彭龙 1 0 0 1 330
5868 30214 5129 王磊 2 0 0 1 513
5918 40211 5505 韩枫 2 0 0 0 431
5967 40306 5008 徐莹 3 0 0 0 631
5968 40307 5022 王阳 3 0 0 0 582
5969 40308 5005 王莹 3 0 0 0 639
5970 40309 5013 张莹 3 0 0 0 614
5971 40310 5012 李娇 3 0 0 0 615
5972 30401 5202 李振宇 4 0 0 1 501
5973 30402 5225 白灵杉 4 0 0 1 480
6003 30434 5827 孟鹤 4 0 0 1 347
6004 30435 5525 李瑞 4 0 0 1 419
6005 30436 5714 麻芮菊 4 0 0 1 409
6006 30437 5928 董雪 4 0 0 1 305
6054 30528 5627 李林哲 5 0 0 1 396
6055 30529 5904 孙丽 5 0 0 1 341
6077 30552 5908 杨晓菲 5 0 0 1 339
6078 30553 5911 卢计源 5 0 0 1 334
6079 30554 5621 吴珊珊 5 0 0 1 399
6080 30555 5803 张宁 5 0 0 1 363
6207 30656 4724 张野 6 0 1 1 333
6208 30657 4809 金铮 6 0 1 1 317
6209 30658 3910 卫玮 6 0 1 1 414.5
6210 30701 0430 李哲 7 0 1 1 631
6211 30702 0517 齐晓乐 7 0 1 1 623
6259 30750 4603 顾佳 7 0 1 1 356
6260 30751 4824 高丹丹 7 0 1 1 305
6261 30752 4235 王道涵 7 0 1 1 385
6262 30753 4612 于志华 7 0 1 1 352
6263 30754 4813 黄绍宇 7 0 1 1 314
6264 30755 4811 徐珊珊 7 0 1 1 316
6265 30756 4808 张鹏达 7 0 1 1 319
6266 40703 4005 王欣 7 0 1 0 408
6267 40701 1816 吴宇航 7 0 1 0 535
6268 40702 3015 许治 7 0 1 0 471
6269 30801 0334 王宇 8 0 1 1 646
6270 40802 0732 张新宇 8 0 1 0 605
6315 30847 4127 孙璐 8 0 1 1 397.5
6330 30862 4211 吴琼 8 0 1 1 392.5
6354 40886 4023 张秋生 8 0 1 0 405
6355 40887 4116 姚宗志 8 0 1 0 399.5
6356 40888 3718 齐兆平 8 0 1 0 424.5
6357 40802 4419 王帅 8 0 1 0 372.5
6358 30901 1111 葛小榕 9 0 1 1 579
6431 40905 1219 陈清华 9 0 1 0 571.5
6432 30972 1319 陈海成 9 0 1 1 565
6433 40907 0928 潘文 9 0 1 0 590
6434 40908 1229 郝芯 9 0 1 0 569
6435 40909 1920 刘跃阳 9 0 1 0 530
6436 40910 1332 徐小明 9 0 1 0 562.5
6437 40911 1805 董朦 9 0 1 0 538
6438 40912 1503 王佳琦 9 0 1 0 555
6439 40913 2107 魏微 9 0 1 0 522
6440 40915 2016 孙冲 9 0 1 0 525
6441 40916 3503 王竟汉 9 0 1 0 444
6502 31058 4505 李海 10 0 1 1 368
6503 31059 3519 姚帅 10 0 1 1 441
6504 31060 4526 高振飞 10 0 1 1 361


要求的分段表:fenduan表:
bj 600 590 580 570 560 550 540 520 510 500 …………400 小于400
1 这一行分别在相应字段下填写 1班大于等于600的人数,1班>=590的人数……………………
2 这行是2班的。
3 3班的各分段人数。
4 4班各分段人数。
5
文总 文科总计各分段人数。
6
7
8
9
10
理总:




注:我这里算的都是>=各分段的人数,是累计人数。不是区间人数。


是我说的不明白。麻烦大家了。谢谢大家帮忙。
of123 2008-11-21
  • 打赏
  • 举报
回复
用Partition函数分段统计, 给你一个 DAO 例子:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = DBEngine.OpenDatabase("C:\Program Files\Microsoft Visual Studio\VB98\Nwind.mdb")

Set rs = db.OpenRecordset("SELECT DISTINCTROW Partition([freight],0, 500, 50) AS Range, Count(Orders.Freight) As Count From Orders GROUP BY Partition([freight],0,500,50)")
Set Data1.Recordset = rs

结果:
Range Count
0: 49 469
50: 99 174
100:149 70
150:199 44
200:249 25
250:299 13
300:349 4
350:399 11
400:449 3
450:499 4
501: 13
vbman2003 2008-11-21
  • 打赏
  • 举报
回复
示例一下相关表和数据吧...
laoshezhu 2008-11-21
  • 打赏
  • 举报
回复
我再补充一下:
假设是六百分满分.然后分别求出各班 600 到 400 每十分为一个分数段.
都求累加的分数段.
例如:450这个字段下面,1班对应的值是1班所有学生中,zf>=450的人数.
格式.要和我说的一样.就是各个分段(600,590,……400)作为字段名。
每个班级的各个分段人数,做为一条记录。

我是用VB+access做的。
希望给出解决方案。如果一条SQL能解决的话。那么只给SQL也可以。

如果不行。给个大体方向。需要分几步去做,大体上做什么。

谢谢你们的关注。
jhone99 2008-11-21
  • 打赏
  • 举报
回复
600分是满分吗?
jhone99 2008-11-21
  • 打赏
  • 举报
回复
说的不清楚
要sql吗?

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧