Office中国论坛/Access中国论坛

标题: 如何让一个表胖起来——浅谈交叉表查询和联合查询 [打印本页]

作者: roych    时间: 2024-1-20 02:23
标题: 如何让一个表胖起来——浅谈交叉表查询和联合查询
      对于一个人来说,胖起来就是变宽,比如,腰围变宽了,以前我的裤腰是28码,现在32码。要说体重没增加,我估计没人会信。      大多数情况下,增肥其实并不难。少运动,少动脑,多吃多睡,不熬夜,很快就会胖起来。
      而对于表来说,”胖“起来 当然是将它变成宽表(不了解宽表的版友,请移步这里)了。
      最直接的方法就是用交叉表查询。众所周知,交叉表查询将一列(字段)转为列标题后,想不宽都难。
      但如果已经是宽表了,又应该如何处理?
[attach]64735[/attach]
      比如,如何将上图转为下图?
[attach]64736[/attach]
      这问题就像在问:如何让一个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;
复制代码
     创建完的联合查询是这样的:
[attach]64737[/attach]
      不但没胖,反而更”瘦“(长)了。接下来怎么办?
      没错,就是将这个瘦子变胖:
[attach]64738[/attach]
最终结果如附件所示:
[attach]64739[/attach]

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

作者: tmtony    时间: 2024-1-22 09:56
不错的技巧!!
作者: zhengjialon    时间: 2024-1-23 08:57
查询结果有256列的限制吗?




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3