交叉表查询语法比较
使用交叉表查询可以让汇总数据更容易阅读,交叉表查询计算总和、平均值或其他聚合函数 ,然后按照两组值对结果进行分组:一组值垂直分布在数据表的一侧,而另一组值水平分布在数据表的顶端。在运行交叉表查询时,结果显示在一个数据表中,该数据表的结构不同于其他类型的数据表,与显示相同数据的简单选择查询相比,交叉表查询的结构让数据更易于阅读。
SqlServer2005中对交叉表查询进行了语法上的简化,但是交叉表查询却不是SqlServer2005独有的,事实上Pivot语法源自Access数据库。而在没有这种新语法之前,SqlServer2000中通常使用Case语法来实现交叉表查询。 而这2种方式都不是标准的Sql语句, 其实还有另外一种交叉表查询方式,利用复杂的自我连接可以形成一个交叉表结果(但是可读性将非常差!)本文将会构造一个比较典型的简单例子,分别用几种方式实现,可以简单对比一下。
假设有学生分数表PupleMark如下(这表只是为了说明问题,这并不是一个好的设计,也不符合第3范式标准):
Name Grade Project Mark
甲 1 数学 80
甲 1 语文 70
甲 1 地理 70
甲 1 英语 100
乙 5 语文 75
丙 4 数学 95
乙 5 数学 50
乙 5 英语 87
...... ...... ....... .......
假设我们需要查询出一个汇总表,看见3-6年级的数学、英语、语文(其他科目不需要,一二年级不需要)的平均分,大约如下:
语文 数学 英语
3
4
5
6
先来看看Access下的语法:
TRANSFORM Avg(Mark)
SELECT Grade
FROM PupleMark
WHERE Grade > 2
GROUP BY Grade
ORDER BY Grade
PIVOT Project IN ('语文','数学','英语')
接下来是SqlServer2000中常用的case语法:
SELECT Grade,
Avg(Case Project WHEN '语文' THEN Mark ELSE NULL END),
Avg(Case Project WHEN '数学' THEN Mark ELSE NULL END),
Avg(Case Project WHEN '英语' THEN Mark ELSE NULL END)
FROM PupleMark
WHERE Grade > 2
GROUP BY Grade
ORDER BY Grade
然后是SqlServer2005中新增加的交叉表语法:
SELECT Grade,语文,数学,英语
FROM (SELECT Grade, Mark, Project FROM PupleMark ) A
PIVOT (Avg(Mark) FOR Project IN (语文,数学,英语))
WHERE Grade > 2
ORDER BY Grade
最后是可读性很差的标准连接语法:
SELECT A.Grade, A.数学, B.语文,C.英语 FROM
(SELECT Grade,Avg(Mark) AS 数学 FROM PupleMark WHERE Project='数学' GROUP BY Grade) A
INNER JOIN (SELECT Grade,Avg(Mark) AS 语文 FROM PupleMark WHERE Project='语文' GROUP BY Grade) B
ON A.Grade = B.Grade
INNER JOIN (SELECT Grade,Avg(Mark) AS 英语 FROM PupleMark WHERE Project='英语' GROUP BY Grade) C
ON B.Grade = C.Grade
WHERE A.Grade > 2
ORDER BY Grade
分享到:
相关推荐
交叉表的语法,动态交叉的sql语句交叉表的语法,动态交叉的sql语句 交叉表的语法,动态交叉的sql语句交叉表的语法,动态交叉的sql语句
### 一种通用的交叉表查询方法的实现 #### 摘要 在信息系统开发过程中,交叉表查询是一个常见的问题。目前常用的查询方法包括通过特定的查询语句查询、由第三方报表组件直接生成以及创建临时表。然而,这些方法...
此描述进一步明确了目标是使用标准SQL语法来实现交叉表的功能,即在一个表格中,行和列的数据可以相互转换,形成类似透视的效果。 #### 知识点详解 ### 一、创建临时表并填充数据 ```sql CREATE TABLE #result ( ...
### Oracle交叉表SQL知识点解析 #### 一、交叉表(Pivot Table)概念与应用场景 在数据分析领域,交叉表(Pivot Table)是一种常见的数据整理技术,它将原始数据按照特定维度进行重组,使得数据从行式存储变为列式...
本主题聚焦于"C#动态交叉表查询",这是一个关键的数据库操作技术,用于处理和展示数据的多维度分析。交叉表查询,也称为透视表或转置查询,允许用户将数据按照不同的列和行进行汇总,以揭示更深层次的模式和趋势。 ...
本资料"MLDN魔乐科技JAVA培训_Oracle课堂8_多表查询基本语法.rar"聚焦于Oracle数据库中的多表查询基本语法,这对于Java开发人员深入理解数据库操作至关重要。 首先,我们来讨论多表查询的基础概念。在实际应用中,...
在实现这个系统时,学生需要掌握C语言的基本语法,包括结构体的定义和使用、指针的操作、文件I/O、链表操作(如插入、删除、遍历)以及用户界面设计。此外,还需要理解数据结构的概念,特别是链表结构及其操作,以及...
SQL查询语法汇集主要涵盖的是如何在SQL中进行多表查询,特别是通过连接查询来获取数据。连接查询是SQL中一种非常重要的操作,它允许我们从多个相关联的表中提取信息,这是关系数据库管理系统的基石。 连接操作在`...
SQL查询语法是数据库管理的基础,尤其对于数据的检索和分析至关重要。本文主要聚焦于SQL查询中的连接查询,这是从多个表中获取数据的关键方法。连接查询允许我们在不同表之间建立联系,以获得更全面的数据视图。 在...
5. 统计分析:SPSS提供了丰富的统计分析命令,覆盖了包括描述性统计、交叉表分析、方差分析、回归分析、多变量分析等广泛内容。利用SPSS强大的统计功能,用户可以执行诸如频率分析、均值比较、相关性分析、非参数...
- 语法:`SELECT * FROM 表 WHERE 列 ANY (子查询);` - 示例:`SELECT * FROM 学生档案表 WHERE 年龄 ANY (SELECT 年龄 FROM 学生档案表 WHERE 学号 IN (SELECT 学生ID FROM 学生成绩表 WHERE 成绩 > 90));` - **...
1. 子查询:在查询语句中嵌套其他查询,用于处理更复杂的数据筛选和比较。 2. 联接(JOIN):包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)、交叉连接(CROSS JOIN)等,用于合并多个表的...
通过本文的介绍,我们了解到Oracle中的多表联接查询包括等值联接、非等值联接、外联接、自联接、交叉联接和自然联接等多种形式。每种联接方式都有其适用场景,掌握这些技巧对于进行复杂的数据分析和处理非常有用。在...
运算符包括算术运算符、关系运算符、逻辑运算符等,如+、-、*、/、=、/=、AND、OR、NOT等,这些运算符用于处理和比较数据。 **2. 结构体与实体** VHDL的实体描述了硬件接口,包括输入、输出和内部信号。结构体则...
笛卡尔连接是一个需要注意的概念,它发生在没有明确连接条件的多表查询中,导致结果集为各表记录的交叉乘积。例如,在`emp`和`dept`表之间没有指定连接条件的查询将返回所有可能的员工与部门的组合,这通常不是我们...
多表查询主要分为内连接(Inner Join)、外连接(Outer Join)以及交叉连接(Cross Join)三种类型。 1. 内连接(Inner Join): 内连接返回两个表中连接列值相等的记录。换句话说,它只返回那些在两个表的连接列...
非等值连接则涉及到不直接相等的列之间的比较,例如,当我们要查询工资在`JOB_GRADES`表中定义的最高和最低工资之间的员工时,就可以使用非等值连接。在这种情况下,`BETWEEN`运算符结合两个表的相应字段,确保了...
#### 七、多表查询和子查询 **1. SQL92的连接查询** - **等值连接**: ```sql SELECT s.*, c.* FROM student s, classes c WHERE s.cid = c.id; ``` - **非等值连接**: ```sql SELECT s.*, c.* FROM student ...
4. **多表交叉联接查询**: - 交叉联接示例: ```sql SELECT Students.Name, Courses.Title FROM Students CROSS JOIN Courses; ``` #### 数据库用户 1. **创建登录帐户**: - 创建登录账户: ```sql ...
### MySQL多表查询详解 #### 一、多表关系与设计原则 在数据库设计中,为了反映业务逻辑的真实情况,通常需要定义不同表之间的关系。这些关系主要包括:一对多(或多对一)、多对多以及一对一。 - **一对多(多对...