Office中国论坛/Access中国论坛
标题:
如何让一个表胖起来——浅谈交叉表查询和联合查询
[打印本页]
作者:
roych
时间:
2024-1-20 02:23
标题:
如何让一个表胖起来——浅谈交叉表查询和联合查询
对于一个人来说,胖起来就是变宽,比如,腰围变宽了,以前我的裤腰是28码,现在32码。要说体重没增加,我估计没人会信。
大多数情况下,增肥其实并不难。少运动,少动脑,多吃多睡,不熬夜,很快就会胖起来。
而对于表来说,”胖“起来 当然是将它变成宽表(不了解宽表的版友,请移步
这里
)了。
最直接的方法就是用交叉表查询。众所周知,交叉表查询将一列(字段)转为列标题后,想不宽都难。
但如果已经是宽表了,又应该如何处理?
[attach]64735[/attach]
比如,如何将上图转为下图?
[attach]64736[/attach]
这问题就像在问:如何让一个180斤的胖子,变成320斤的相扑选手。
虽然听起来很难,但实际上,稍作思考,我们就会有答案了。这些A、B之类,来自于科目的选项内容。因此,需要将科目名称和选项内容分别作为两列,然后进行拼接。拼接完成后,再进行统计即可。
选项内容已经存在了,也就是”语数英物化“这几列。但科目名称是没有的,因此,需要自定义创建一列。第一个查询大致是这样的:
SELECT 班级, 题号, 语 as 选项, "语文" AS 科目
FROM b
复制代码
考虑到不止”语文“一个选项。因此最终的查询应该是一个联合查询:
SELECT 班级, 题号, 语 as 选项, "语文" AS 科目
FROM b
union all
SELECT 班级, 题号, 数 as 选项, "数学" AS 科目
FROM b
union all
SELECT 班级, 题号, 英 as 选项, "英语" AS 科目
FROM b
union all
SELECT 班级, 题号, 物 as 选项, "物理" AS 科目
FROM b
UNION ALL SELECT 班级, 题号, 化 as 选项, "化学" AS 科目
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