交叉表查询中的多列显示。
利用交叉表,我们可以对某个列字段的项目进行显示,比如[学科]来显示[考试成绩],那么是否能同时显示其[作业成绩]在同一个交叉表查询中?
比如下面数据
Table3
+-----+--------+-------+-------+------+-------------+
|id |sName |sClass |Course |Score |homeworkScore|
+-----+--------+-------+-------+------+-------------+
|1 |AAA |3 |语文 |50 |8 |
|2 |AAA |3 |数学 |83 |9 |
|3 |AAA |3 |英语 |65 |7 |
|4 |BBB |3 |语文 |86 |6 |
|5 |BBB |3 |数学 |95 |5 |
|6 |BBB |3 |英语 |58 |5 |
|7 |CCC |3 |语文 |92 |8 |
|8 |CCC |3 |数学 |75 |7 |
|9 |CCC |3 |英语 |78 |7 |
|10 |DDD |3 |语文 |83 |7 |
|11 |DDD |3 |数学 |76 |8 |
|12 |DDD |3 |英语 |77 |8 |
|13 |EEE |3 |语文 |60 |6 |
|14 |EEE |3 |数学 |76 |10 |
|15 |EEE |3 |英语 |58 |8 |
|16 |FFF |4 |语文 |85 |8 |
|17 |FFF |4 |数学 |62 |9 |
|18 |FFF |4 |英语 |60 |8 |
|19 |GGG |4 |语文 |81 |5 |
|20 |GGG |4 |数学 |80 |7 |
|21 |GGG |4 |英语 |97 |5 |
|22 |HHHH |4 |语文 |74 |9 |
|23 |HHHH |4 |数学 |88 |6 |
|24 |HHHH |4 |英语 |50 |7 |
|25 |IIIIIII |4 |语文 |95 |8 |
|26 |IIIIIII |4 |数学 |68 |7 |
|27 |IIIIIII |4 |英语 |50 |7 |
|28 |JJJJ |5 |语文 |62 |6 |
|29 |JJJJ |5 |数学 |97 |7 |
|30 |JJJJ |5 |英语 |61 |9 |
|31 |LL |5 |语文 |80 |7 |
|32 |LL |5 |数学 |95 |9 |
+-----+--------+-------+-------+------+-------------+
我们可以得到关于科目的交叉表查询 [考试成绩],也可以得到[作业成绩]
TRANSFORM Sum(Table3.Score)
SELECT Table3.sName, Table3.sClass
FROM Table3
GROUP BY Table3.sName, Table3.sClass
PIVOT Table3.Course;
+-------+------+----+----+----+
|sName |sClass|数学|英语|语文|
+-------+------+----+----+----+
|AAA |3 |83 |65 |50 |
|BBB |3 |95 |58 |86 |
|CCC |3 |75 |78 |92 |
|DDD |3 |76 |77 |83 |
|EEE |3 |76 |58 |60 |
|FFF |4 |62 |60 |85 |
|GGG |4 |80 |97 |81 |
|HHHH |4 |88 |50 |74 |
|IIIIIII|4 |68 |50 |95 |
|JJJJ |5 |97 |61 |62 |
|LL |5 |95 | |80 |
+-------+------+----+----+----+
TRANSFORM Sum(Table3.homeworkScore)
SELECT Table3.sName, Table3.sClass
FROM Table3
GROUP BY Table3.sName, Table3.sClass
PIVOT Table3.Course;
+-------+------+----+----+----+
|sName |sClass|数学|英语|语文|
+-------+------+----+----+----+
|AAA |3 |8 |6 |8 |
|BBB |3 |6 |7 |7 |
|CCC |3 |7 |9 |9 |
|DDD |3 |7 |6 |9 |
|EEE |3 |5 |8 |5 |
|FFF |4 |7 |7 |7 |
|GGG |4 |6 |10 |8 |
|HHHH |4 |8 |9 |8 |
|IIIIIII|4 |5 |7 |8 |
|JJJJ |5 |9 |7 |5 |
|LL |5 |7 | |8 |
+-------+------+----+----+----+
那么如何把这两项合并显示呢?
首先容易想到的方法是,将这两个单独的交叉表查询保存了各自的查询,比如query1,query2,然后再形成基于这两个 query1,query2 的 inner join 查询。
SELECT Query1.*, Query2.*
FROM Query1 INNER JOIN Query2 ON Query1.sName = Query2.sName;
由于 交叉表查询 的列数我们无法预知,所以只能选择 Query1.*, Query2.* 所有的字段。结果如下
+--------+---------+-------+-------+-------+--------+---------+-------+-------+-------+
|Q1.sName|Q1.sClass|Q1.数学|Q1.英语|Q1.语文|Q2.sName|Q2.sClass|Q2.数学|Q2.英语|Q2.语文|
+--------+---------+-------+-------+-------+--------+---------+-------+-------+-------+
|AAA |3 |83 |65 |50 |AAA |3 |8 |6 |8 |
|BBB |3 |95 |58 |86 |BBB |3 |6 |7 |7 |
|CCC |3 |75 |78 |92 |CCC |3 |7 |9 |9 |
|DDD |3 |76 |77 |83 |DDD |3 |7 |6 |9 |
|EEE |3 |76 |58 |60 |EEE |3 |5 |8 |5 |
|FFF |4 |62 |60 |85 |FFF |4 |7 |7 |7 |
|GGG |4 |80 |97 |81 |GGG |4 |6 |10 |8 |
|HHHH |4 |88 |50 |74 |HHHH |4 |8 |9 |8 |
|IIIIIII |4 |68 |50 |95 |IIIIIII |4 |5 |7 |8 |
|JJJJ |5 |97 |61 |62 |JJJJ |5 |9 |7 |5 |
|LL |5 |95 | |80 |LL | |7 | |8 |
+--------+---------+-------+-------+-------+--------+---------+-------+-------+-------+
有没有其它的方法?
如果用户的需求只是为了显示,(交叉表查询好象也只能为了显示,无法更新,想不出还有什么用途), 则可以通过字符串合并操作把多个字段合并为一个字段。如下 (由于是字符串,这里改sum()为min())
TRANSFORM min(Table3.Score & ' + ' & Table3.homeworkScore)
SELECT Table3.sName, Table3.sClass
FROM Table3
GROUP BY Table3.sName, Table3.sClass
PIVOT Table3.Course;
+-------+------+-------+-------+-------+
|sName |sClass|数学 |英语 |语文 |
+-------+------+-------+-------+-------+
|AAA |3 |83 + 8 |65 + 6 |50 + 8 |
|BBB |3 |95 + 6 |58 + 7 |86 + 7 |
|CCC |3 |75 + 7 |78 + 9 |92 + 9 |
|DDD |3 |76 + 7 |77 + 6 |83 + 9 |
|EEE |3 |76 + 5 |58 + 8 |60 + 5 |
|FFF |4 |62 + 7 |60 + 7 |85 + 7 |
|GGG |4 |80 + 6 |97 + 10|81 + 8 |
|HHHH |4 |88 + 8 |50 + 9 |74 + 8 |
|IIIIIII|4 |68 + 5 |50 + 7 |95 + 8 |
|JJJJ |5 |97 + 9 |61 + 7 |62 + 5 |
|LL |5 |95 + 7 | |80 + 8 |
+-------+------+-------+-------+-------+
如果还要计算,比如导入到EXCEL中,则需要把多列按 交叉表查询 的要求整理一下数据源。
select sName,sClass,Course & ':考试成绩' as sColID,Score as vCol
from Table3
UNION ALL
select sName,sClass,Course & ':作业成绩' as sColID,homeworkScore as vCol
from Table3
+-----+------+--------------+-----+
|sName|sClass|sColID |vCol |
+-----+------+--------------+-----+
|AAA |3 |数学:考试成绩 |83 |
|AAA |3 |英语:考试成绩 |65 |
|BBB |3 |语文:考试成绩 |86 |
|BBB |3 |数学:考试成绩 |95 |
|AAA |3 |语文:考试成绩 |50 |
|AAA |3 |数学:作业成绩 |8 |
|AAA |3 |英语:作业成绩 |6 |
|BBB |3 |语文:作业成绩 |7 |
|BBB |3 |数学:作业成绩 |6 |
........
|LL |5 |语文:作业成绩 |8 |
|LL |5 |数学:作业成绩 |7 |
+-----+------+--------------+-----+
然后再基于此做交叉查询.
TRANSFORM Sum(t.vCol)
SELECT t.sName, t.sClass
FROM (
select sName,sClass,Course & ':考试成绩' as sColID,Score as vCol
from Table3
UNION ALL
select sName,sClass,Course & ':作业成绩' as sColID,homeworkScore as vCol
from Table3
)t
GROUP BY t.sName, t.sClass
PIVOT t.sColID;
+-------+------+-------------+-------------+-------------+-------------+-------------+-------------+
|sName |sClass|数学:作业成绩|数学:考试成绩|英语:作业成绩|英语:考试成绩|语文:作业成绩|语文:考试成绩|
+-------+------+-------------+-------------+-------------+-------------+-------------+-------------+
|AAA |3 |8 |83 |6 |65 |8 |50 |
|BBB |3 |6 |95 |7 |58 |7 |86 |
|CCC |3 |7 |75 |9 |78 |9 |92 |
|DDD |3 |7 |76 |6 |77 |9 |83 |
|EEE |3 |5 |76 |8 |58 |5 |60 |
|FFF |4 |7 |62 |7 |60 |7 |85 |
|GGG |4 |6 |80 |10 |97 |8 |81 |
|HHHH |4 |8 |88 |9 |50 |8 |74 |
|IIIIIII|4 |5 |68 |7 |50 |8 |95 |
|JJJJ |5 |9 |97 |7 |61 |5 |62 |
|LL |5 |7 |95 | | |8 |80 |
+-------+------+-------------+-------------+-------------+-------------+-------------+-------------+
本文只是探讨了一种在ACCESS中如何实现多列数据同样在交叉查询表中实现的方法。当然还有很多方法。
交叉表查询中的多列显示。相关推荐
- 交叉表查询中的多列显示
利用交叉表,我们可以对某个列字段的项目进行显示,比如[学科]来显示[考试成绩],那么是否能同时显示其[作业成绩]在同一个交叉表查询中? 比如下面数据 Table3 +-----+--------+-- ...
- Mysql5 实现交叉表查询
交叉表.行列转换和交叉查询经典 一.什么是交叉表 "交叉表"对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: ...
- 在MySQL中实现交叉表查询2(动态交叉表)
在MySQL中实现交叉表查询2(动态交叉表) 交叉表分为静态交叉表和动态交叉表.其中静态交叉表中的列是固定的,因此相对容易实现:而动态交叉表中的列需要动态生成. 一.静态交叉表的实现 参见上一篇文章: ...
- 在MySQL中实现交叉表查询1(静态交叉表)
在MySQL中实现交叉表查询1(静态交叉表) 一.什么是交叉表 交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值. ...
- 创建交叉表_质性数据分析软件NVivo教程:交叉表查询
交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...
- java动态交叉表,SqlServer如何生成动态交叉表查询
为了说明问题,我们用SqlServer自带的事例数据库(Northwind)来进行验证,所有的例子请放到Northwind中运行,我可能会省略Use语句,所引用的表,都是Northwind中的,下面我 ...
- ireport交叉报表 crosstab排序_质性数据分析软件NVivo教程:交叉表查询
交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...
- 交叉表 mysql_mysql交叉表查询解决方案整理
交叉表是一种常用的分类汇总查询.使用交叉表查询,可以显示表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部.行和列的交叉处可以对数据进行多种汇总计算,如:求和.平均值 ...
- 5.7.1 使用向导创建交叉表查询
示例ACCESS数据库下载链接: https://download.csdn.net/download/ngbshzhn/20979935 使用交叉表查询计算和重构数据,可以简化数据分析,交叉表查询计 ...
最新文章
- 前端知识点之CSS(一)
- python搞笑代码-python有趣代码
- JS中自定义replace可替换特殊符号$等,但无法忽略大小写的函数
- fastboot 重启到recovery
- WEB服务器、应用程序服务器、HTTP服务器的区别
- 七个步骤,带你快速读懂 RPC 框架原理
- pycharm remote 远程项目 同步 本地_利器:PyCharm本地连接服务器搭建深度学习实验环境的三重境界...
- Java ObjectInputStream readDouble()方法与示例
- python typing optional_python类型检测最终指南--Typing模块的使用
- CUDA Study Notes
- CSS样式(三) - div盒子
- layui官方文档镜像,layui主页,layui镜像网站,layui资源下载,技术文档
- RB Tree的部分实现
- 水星无线路由启动dhcp服务器,水星无线路由器桥接设置桥接(图文详解) | 192.168.1.1登陆页面...
- 【Mac网络错误】-只能登陆微信,无法访问网页
- 加密数字货币的开发技术介绍
- Google MLOps白皮书:MLOps实践者指南Part I MLOps生命周期及核心能力
- LaTex中图片插入
- 插件开发之国际化(i18n)
- idea中删除的东西如何找回来