设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2334|回复: 4
打印 上一主题 下一主题

[查询] 【新手入门】之二十四:查询的大型翻车现场——再谈表设计范式(之一)

[复制链接]
跳转到指定楼层
1#
发表于 2020-4-12 17:47:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天闲着无聊,便到论坛上拔下草,发现有版友问及查询的问题(原文在这里):
肺活量分数: IIf([肺活量]>DMax("指数下限","肺活量评分","年级 & 性别='" [年级] & [性别2] & "'"),DLookUp("得分","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "' and 指数下限=" & DMax("指数下限","肺活量评分","年级 & 性别='" [年级] & [性别2] & "'")),DLookUp("得分","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "' and 指数下限=" & DMax("指数下限","肺活量评分","年级 & 性别='"[年级] & [性别2] & "' and 指数下限<=" & [肺活量])))

一看这个辣眼睛的SQL语句,我当时就蒙圈了。这么复杂的语句,实话说,我自己也不敢担保写出来能不能运行。事实上,我也没完全看明白。不过根据语句意思,我理解的理解是这样:
例如,大四男生的肺活量,5000是100分,4800是90分。如果考生的成绩是5500,那毫无疑问是满分了;如果是4832,则还是90分。
像上面的例子,4832并不在肺活量评分表里,你只能先去表里寻找不超过4832的最大值【即4800】,然后再根据4800去匹配成绩等级。于是就有了前面dmax套上dlookup的写法。
从思路来看,似乎没什么问题。但实际操作中,很容易出现各种问题。例如,假设大四男生的肺活量是2300-5000,那么低于2300的必然找不到,该如何处理?而且域函数的效率本身已经很低了,还嵌套这么多层,真的好吗?有其它解决方法吗?

其实我在该帖子的回帖里已经给出了至少两种方法(VBA部分,暂时先不提)。
一种是在原基础上通过多个中间查询最后得到结果;另一个是重构参数表,将离散变量转为连续变量,与成绩表中的离散数据进行关联匹配。
其中第二个方法,引发了另一个版友的讨论,这参数表是否太大了?一旦调整参数,是否需要插入更多的数据?为此,我决定根据表设计范式重新处理它。准备作为一个系列来讲解,希望新手看完,能对表设计理论加深理解。

这里先给出源文件,大家也可以思考下,这个表该如何改造。


【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集
【新手入门】之二十二:分组行号
【新手入门】之二十三:“富则妻妾成群”——浅谈一对多录入数据
【新手入门】之二十四:查询的大型翻车现场——再谈表设计范式(之一)
【新手入门】之二十五:查询的大型翻车现场——再谈表设计范式(之二)
【新手入门】之二十六:查询的大型翻车现场——再谈表设计范式(之三)
【新手入门】之二十七:查询的大型翻车现场——再谈表设计范式(之四)

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统【新手进阶】之十五:你可能遇到了一个假的标签效果



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2020-4-26 15:26:27 | 只看该作者
学习
回复

使用道具 举报

3#
发表于 2020-9-4 18:58:32 | 只看该作者
反正我是晕了

点评

更新了链接,请留意后面的表改造  发表于 2020-9-4 19:36
4#
发表于 2020-9-5 18:48:43 | 只看该作者
其实最大问题是数据多出不来,也是域函数通病,roych 给我一个方案,已收了,我也进行改造,不错,因为经销商已有了软件,就没用了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-23 12:35 , Processed in 0.130820 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表