利用交叉表,我们可以对某个列字段的项目进行显示,比如[学科]来显示[考试成绩],那么是否能同时显示其[作业成绩]在同一个交叉表查询中?

比如下面数据
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            |
.......
|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  |
.....
|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   |
.....
|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中如何实现多列数据同样在交叉查询表中实现的方法。当然还有很多方法。

交叉表查询中的多列显示相关推荐

  1. 交叉表查询中的多列显示。

    利用交叉表,我们可以对某个列字段的项目进行显示,比如[学科]来显示[考试成绩],那么是否能同时显示其[作业成绩]在同一个交叉表查询中? 比如下面数据 Table3 +-----+--------+-- ...

  2. Mysql5 实现交叉表查询

    交叉表.行列转换和交叉查询经典 一.什么是交叉表 "交叉表"对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: ...

  3. 在MySQL中实现交叉表查询2(动态交叉表)

    在MySQL中实现交叉表查询2(动态交叉表) 交叉表分为静态交叉表和动态交叉表.其中静态交叉表中的列是固定的,因此相对容易实现:而动态交叉表中的列需要动态生成. 一.静态交叉表的实现 参见上一篇文章: ...

  4. 在MySQL中实现交叉表查询1(静态交叉表)

    在MySQL中实现交叉表查询1(静态交叉表) 一.什么是交叉表 交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值. ...

  5. 创建交叉表_质性数据分析软件NVivo教程:交叉表查询

    交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...

  6. java动态交叉表,SqlServer如何生成动态交叉表查询

    为了说明问题,我们用SqlServer自带的事例数据库(Northwind)来进行验证,所有的例子请放到Northwind中运行,我可能会省略Use语句,所引用的表,都是Northwind中的,下面我 ...

  7. ireport交叉报表 crosstab排序_质性数据分析软件NVivo教程:交叉表查询

    交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...

  8. 交叉表 mysql_mysql交叉表查询解决方案整理

    交叉表是一种常用的分类汇总查询.使用交叉表查询,可以显示表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部.行和列的交叉处可以对数据进行多种汇总计算,如:求和.平均值 ...

  9. 5.7.1 使用向导创建交叉表查询

    示例ACCESS数据库下载链接: https://download.csdn.net/download/ngbshzhn/20979935 使用交叉表查询计算和重构数据,可以简化数据分析,交叉表查询计 ...

最新文章

  1. 树与森林的存储、遍历和树与森林的转换
  2. Cocos2d-x v3.1 坐标系统(五)
  3. linux android gradle构建机器 error while loading shared libraries: libz.so.1: cannot open shared object
  4. Informix IDS 11系统料理(918查验)认证指南,第 4 部分: 功能调优(5)
  5. dbgrideh 为什么只一行_Mysql性能优化:为什么count(*)这么慢?
  6. XM7 FOR ANDROID,视频剪辑制作app-视频剪辑制作xm8.0安卓版-蜻蜓手游网
  7. Qt文档阅读笔记-QGraphicsEffect::draw(QPainter *painter)官方解析与实例
  8. ubuntu下针对php的thrift 安装折腾记录
  9. 通用的linux下安装配置svn独立服务
  10. 理解伪元素:before和:after
  11. Struts2基本包作用详解
  12. Helen人脸数据集生成人脸分割
  13. 均匀分布方差的计算方法
  14. 代码评审工具Rietveld平台搭建(windowsLinux均可)
  15. windows控制台命令: 快捷键大集合
  16. Photoshop教程四:Camera RAW 批量调色
  17. 国外知名广告联盟平台
  18. 使用SSH密钥登录腾讯云主机
  19. SUSE(Linux操作系统)
  20. 办公逸CTO王斌:提高产品响应速度应注意的二十五个技术细节

热门文章

  1. Fiddler实战深入研究(二)——模拟返回数值
  2. Redis安装的快速指南
  3. 趣头条广告投放的效果怎么样?趣头条广告开户找哪里?
  4. c语言数的排序问题(起泡法)
  5. Android机顶盒Linux终端修改时间
  6. JS检测,禁用浏览器开发者工具之6大方法探讨
  7. 使用Tkinter编写一个简单的窗口应用
  8. HTPC知识普及讲座之五 周边硬件如何选
  9. 今天,影响了一位试用期员工的去留
  10. ROS的GPS驱动包