上次我们介绍了带有固定编号的数据如何通过交叉表查询进行行列转换,是不是非常的神奇呢。
今天我们再介绍一下若是没有编号的数据如何产生类似行列转换的效果呢?
他只是达到类似交叉表的效果,但它不再叫做交叉表查询,而是通过生成表查询、更新表查询组合使用而实现的。
这一节通过一个示例来演示的是生成表查询和更新表查询的设计。
数据样本如下(也就是某个站点的每个最近发生告警的邻区表,表名叫“告警清单”):

期望最后整理的结果为(也就是都有那些邻区最近有告警发生,从而可能对本站服务质量产生影响,暂未考虑告警次数多少排序):

七 生成表查询—查询设计
首先我们需要创建一张表,将所有邻区有告警所涉及到的站点生成一个清单,效果是这样的:

怎么实现呢?依然是创建查询,添加表“告警清单”,点击汇总按钮,并修改查询类型为生成表,这时会提示你输入生成新表的名字,填入“期望结果”后确定;

然后修改总计行和字段行如下所示,并保存此查询为“1生成告警期望结果”,执行后你就会发现多了一个名叫“期望结果”的表出来。

其结果就如本小节开头的示例一样了。
下来我们要对每个站点的告警邻区填到“邻区存在告警站点明细”字段里,如何实现呢,那就要展示更新表查询的能耐了。
八 更新表查询—查询设计
依然创建查询,添加表“期望结果”和“告警清单”,并将站点进行普通联接,并且将查询更改为更新表查询

划重点,“更新到”这一行又要手工填写了,他的意义就是用当前的期望结果表里“邻区存在告警站点明细”字段的内容追加上告警清单表里的邻区站点后填到目标表“期望结果”表中“邻区存在告警站点明细”字段里去。
模拟一下这个过程吧,首先“期望结果”表站点为15575这一行“邻区存在告警站点明细”字段目前是空的,从“告警清单”里找到了第一个站点为15575的记录,这个记录里邻区站点为97650,那么就将“97650,”更新到 “期望结果”表“邻区存在告警站点明细”字段里去,再继续在“告警清单”表里找下一个站点为15575的记录,邻区站点为“97695”,将“97695”和“,”追加到“97650,”后面,就成了“97650,97695,”再更新到“邻区存在告警站点明细”这个字段里去,直到“告警清单”里的记录被遍历完,这样就得到了文章开头的那个结果了。
特别说明:这个模拟过程是为了好解释他,但是千万尽量不要这样去理解Access的运作机制,你会再次回到Excel的思维的,这个用法只能说是Access里的另类,知道就好!
是不是对“更新到”这个词总是觉得很别扭呢,其实他的意思是把字段行所表示的这个字段的值更新为“更新到”这一行里所表示的值,而不是把某值(或字段行的字段值)更新到“更新到”这一行所列的字段上去(更新到这里明显是个表达式,所以不可能表达的是一个字段),你是不是已经被绕进去了,啥时候你把这句话能绕清,说明你更新表查询就彻底门清了。
好好理解一下,这个吃透了,你的Access的功力再一次提升一级了。
下一次就该到了追加查询和删除查询了,算了这个干脆不讲了,自建查询改为删除表查询或追加表查询跟着提示试试就会了!
到这里其实常规的超简查询教程就全部讲完了,这些查询都是有图形设计界面的,自己多琢磨琢磨碰见问题尝试尝试并且多看看错误提示和帮助就会慢慢熟悉和明白的,比如查询设计界面的条件行怎么用?条件行下面还有很多行,他们能干啥呢?条件如何进行且与或呢?细节的东东太多了。
补充一个特殊的没有图形设计界面的查询:联合查询
“联合查询”很特别,他没有图形界面,只能进行手工编写,但是也不是全部得从头编写,其实在SQL视图界面把两个字段数完全相同的选择查询的SQL语句用 UNION连接起来就可以了,生成的SQL就叫做联合查询,目的是为了将两个结构完全一样的不同数据合并到一起去而已。
有具体的问题请加作者微信号/QQ:110290428,并入无数据不网优的微信群里和大家一起交流学习进步吧!

若想继续第一时间获得原创高级网优技能请关注公众号:无数据不网优。

今天顺便也发起个调查,看看各位对Access的熟悉了解情况!




