|
对于一个人来说,胖起来就是变宽,比如,腰围变宽了,以前我的裤腰是28码,现在32码。要说体重没增加,我估计没人会信。 大多数情况下,增肥其实并不难。少运动,少动脑,多吃多睡,不熬夜,很快就会胖起来。
而对于表来说,”胖“起来 当然是将它变成宽表(不了解宽表的版友,请移步这里)了。
最直接的方法就是用交叉表查询。众所周知,交叉表查询将一列(字段)转为列标题后,想不宽都难。
但如果已经是宽表了,又应该如何处理?
比如,如何将上图转为下图?
这问题就像在问:如何让一个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;
复制代码 创建完的联合查询是这样的:
不但没胖,反而更”瘦“(长)了。接下来怎么办?
没错,就是将这个瘦子变胖:
最终结果如附件所示:
这里给大家一个思路,当宽表不好转化为交叉表查询时,不妨先使用联合查询,转为长表,再转为交叉表查询。
最后留一个作业题。如果用iif,能否达成这个效果?如果能,请完成后上传附件,并说明用iif处理和交叉表查询处理的区别。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|