设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 【Access小品】二指禅--等号的妙用

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-13 09:34:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 todaynew 于 2011-10-13 14:04 编辑

  上个世纪八十年代,出了个海灯法师,其二指禅神功轰动一时。有好事者一番调查之后发现,和尚是假和尚,神功是假神功。不过至此以后果真有人苦练,竟然也可用两指倒立起来。科学界实际上也存在一个神秘的二指神功,那就是一个两根手指并成的等号,所有学科的发端,大体皆与这个符号有关。本文打算从Access中的一个小的运用,来揭示等号的高妙功力。

  版友wyj同志问了一个查询的问题,大意是统计某个省份的男女人数,我在查询中用了一个等号进行计算。版主群中聊天时红尘与悟道两同志说这个写法有点意思,于是想可能算是一个小的技巧,便觉得著文细致说道说道。

  假设有下面的这么一个表,想要按单位统计出男女人数。计算的方法有很多,可以分组查询或交叉查询进行计算。

单位        姓名        性别        籍贯        电话
单位1        张1        男        安徽        010-1234
单位2        张2        男        安徽        020-1235
单位3        张3        女        河南        010-1236
单位1        张4        男        河南        020-1237
单位2        张5        女        河南        020-1238
单位2        张6        男        山东        020-1239
单位1        张7        女        山东        010-1240
单位3        张8        男        山东        020-1241
单位1        张9        男        安徽        020-1242
单位1        张10      男        安徽        010-1243

  可以有这么个简单的算法:

select select 单位,-1*sum(性别="男") as 男,-1*sum(性别="女") as 女,count(*) as 总数
from tbname
group by 单位
  
  对初学者来说,猛然一看【性别="男"】有些疑惑,脑海中就在问这是个什么玩意?呵呵,其实很简单,这就是一个逻辑表达式,这个表达式的计算结果只有两个值,要么是-1(True,,表示等式成立),要么是0(False,表示等式不成立)。把所有逻辑值求和得到一个负数,将这个负数进一步计算成正数,就得到了男性的人数合计。

  推而广之,我们可以进一步按照这个思路,进行其他字段的分组计数。比如,可以写如下的SQL语句:

select select 单位,-1*sum(籍贯="安徽") as 安徽,-1*sum(籍贯="河南") as 河南,,-1*sum(籍贯="山东") as 山东,count(*) as 总数
from tbname
group by 单位

select select 单位,-1*sum(left(电话,3)="010") as 区号010,-1*sum(left(电话,3)="020") as 区号020,count(*) as 总数
from tbname
group by 单位

  也可以把所有这些计数查询写在一起,比如:

select select 单位,-1*sum(性别="男") as 男,-1*sum(性别="女") as 女,-1*sum(籍贯="安徽") as 安徽,-1*sum(籍贯="河南") as 河南,-1*sum(籍贯="山东") as 山东,-1*sum(left(电话,3)="010") as 区号010,-1*sum(left(电话,3)="020") as 区号020,count(*) as 总数
from tbname
group by 单位

  由此便可以继续想像,等号在这里并不是重要的,也可以是大于号小于号什么的,只要是构成逻辑表达式便可以按照这思路来进行分组的计数统计了。等号在这里就是两个根具有象征意义的手指,它轻轻的推开了一扇窗户,或者是捅破了一层薄纸。于是乎:“你看,多么蓝的天啊,走吧,走过去,你就会溶化在那蓝天里...”

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-10-13 11:29:44 | 只看该作者
很有趣 谢谢分享!
3#
发表于 2011-10-13 12:12:15 | 只看该作者
很有趣 谢谢分享!

点击这里给我发消息

4#
发表于 2011-10-13 14:10:07 | 只看该作者
哦,原来其实说的不是等号,而是利用真/假类型的特性。这在EXCEL中也经常有妙用。

点击这里给我发消息

5#
发表于 2011-10-14 21:45:48 | 只看该作者
看todaynew 版主的帖子真有被融化进蓝天般舒服!
6#
发表于 2011-10-15 10:45:34 | 只看该作者
流畅的文采!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-8 17:42 , Processed in 0.189980 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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