设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 如何让一个表胖起来——浅谈交叉表查询和联合查询

[复制链接]
跳转到指定楼层
1#
发表于 2024-1-20 02:23:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      对于一个人来说,胖起来就是变宽,比如,腰围变宽了,以前我的裤腰是28码,现在32码。要说体重没增加,我估计没人会信。      大多数情况下,增肥其实并不难。少运动,少动脑,多吃多睡,不熬夜,很快就会胖起来。
      而对于表来说,”胖“起来 当然是将它变成宽表(不了解宽表的版友,请移步这里)了。
      最直接的方法就是用交叉表查询。众所周知,交叉表查询将一列(字段)转为列标题后,想不宽都难。
      但如果已经是宽表了,又应该如何处理?

      比如,如何将上图转为下图?

      这问题就像在问:如何让一个180斤的胖子,变成320斤的相扑选手。
      虽然听起来很难,但实际上,稍作思考,我们就会有答案了。这些A、B之类,来自于科目的选项内容。因此,需要将科目名称和选项内容分别作为两列,然后进行拼接。拼接完成后,再进行统计即可。
      选项内容已经存在了,也就是”语数英物化“这几列。但科目名称是没有的,因此,需要自定义创建一列。第一个查询大致是这样的:
  1. SELECT 班级, 题号, 语 as 选项, "语文" AS 科目
  2. FROM b
复制代码
     考虑到不止”语文“一个选项。因此最终的查询应该是一个联合查询:
  1. SELECT 班级, 题号, 语 as 选项, "语文" AS 科目
  2. FROM b
  3. union all
  4. SELECT 班级, 题号, 数 as 选项, "数学" AS 科目
  5. FROM b
  6. union all
  7. SELECT 班级, 题号, 英 as 选项, "英语" AS 科目
  8. FROM b
  9. union all
  10. SELECT 班级, 题号, 物 as 选项, "物理" AS 科目
  11. FROM b
  12. UNION ALL SELECT 班级, 题号, 化 as 选项, "化学" AS 科目
  13. FROM b;
复制代码
     创建完的联合查询是这样的:

      不但没胖,反而更”瘦“(长)了。接下来怎么办?
      没错,就是将这个瘦子变胖:

最终结果如附件所示:


这里给大家一个思路,当宽表不好转化为交叉表查询时,不妨先使用联合查询,转为长表,再转为交叉表查询。
最后留一个作业题。如果用iif,能否达成这个效果?如果能,请完成后上传附件,并说明用iif处理和交叉表查询处理的区别。

本帖子中包含更多资源

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

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

点击这里给我发消息

2#
发表于 2024-1-22 09:56:21 | 只看该作者
不错的技巧!!

点击这里给我发消息

3#
发表于 2024-1-23 08:57:36 | 只看该作者
查询结果有256列的限制吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 20:07 , Processed in 0.099159 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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