Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 源码示例

用查询建立考号示例 (二)

时 间:2011-10-01 06:49:06
作 者:dbaseIIIer   ID:22003  城市:深圳
摘 要:1。用查询建立考号示例;
2。不以 内JOIN,外JOIN,左JOIN,右JOIN,用全JOIN(ALL JOIN)来关联两个表的数据;
正 文:

煮江品茶 在【Access小品】用查询建立考号...的示例一是采用函数(IIF、Choose、Switch)。

本示例是讲解用 不JOIN 的 表作查询。

版友xuexi同志的需求是 以分数排了序的学生

排序    班     学号         姓名         分数
1     416  41623       严雨蒙     674
2     416  41601       范丽凤     673.5
3     417  41768       赵佳曦     673.5
4     416  41603       范韶迪     658
5     419  41944       马朋         657.5
6     418  41841       尤鹏杰     656
7     416  41636       吕思尧     655.5
8     419  41948       范雄杰     655.5

按顺序编配入排了序有不同容纳人数的考场
考场         位置         人数
1               416         40
2               417         56
3              418         56
4              419         56
5              422         56

我选择了以序号匹配的方式:
1。把考场算上序号的范围

我通过 考场 X 考场 的查询1

Select 考场.考场, 考场.位置, 考场.容纳人数, Sum(考场_1.容纳人数) AS 容纳人数之总计
FROM 考场, 考场 AS 考场_1
Where (((考场.ID)>=[考场_1].[ID]))
GROUP BY 考场.考场, 考场.位置, 考场.容纳人数;

因为每条考场记录都会结合上考场_1 造成一个表的,意思是若果考场表本来有三条记录,
考场
1
2
3
便会生成 9 条记录

考场.ID   考场_1.ID
1        1
1        2
1        3
2        1
2        2
2        3
3        1
3        2
3        3
我们就可以设定条件 当 考场_1 的 ID<= 考场.ID 时 汇总起 能容纳人数
1    40      40
2    56      96
3    56      152
4    56       208
5    56       264
我再以 累计的容纳数 - 去容纳数 + 1
便得出以下数据

查询2
考场 位置 Begin End 容纳人数
1 416班 1 40 40
2 417班 41 96 56
3 418班 97 152 56
4 419班 153 208 56
5 422班 209 264 56

 

答案也是用 不关联多表查询:学生 X 查询2

为了每个学生只进一个考场 我们就可以设定 学生的序号 要在 考场 的 Begin 与 End 内:
FROM 学生, 查询2
Where (((学生.ID) Between [begin] And [end]));
就可以变成一个学生对应一个考场的查询了!

加上我们想要显示的结果:
Select 学生.ID, 学生.班, 学生.学号, 学生.姓名, 学生.分数, 查询2.位置, Format([查询2].[考场],"00") & "-" AS 考场号, Format([ID]-[Begin]+1,"00") AS 考号

注意:考场内第几名入场的 我用了 ID-Begin+1
意思是  学生总排名 - 本考场第一个入场序号 + 1

需要的结果便出来了!

但兄弟会用 非关联表查询时,切记要有合逻辑的条件,
不然 1000条记录 Cross 1000条记录 便成了1百万条记录的了,
这对内存的需求会非常的大,但条件设得好,SQL引擎也会懂得智慧性省资源的!
在 MSDN 上 SQL Server 的支持文件内都叮嘱要小心应用的!

这方法就是选取,是纯以数据本身为基础的,
Select 表达式中不加入条件式表达式,
也不会因为记录数量而改表达式,
我们应该熟习有数据要做累计时,这种查询是最为有效的。

然后我们要关联起 有序号的学生们了!
肉眼就很容易看出哪个学生去哪个考场了,但查询怎做的呢?

Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助