SQL Server 关于 Pivot 详解 在本文中,我们将详细介绍 SQL Server 中的 Pivot 语句,并结合实例分析和实验题目,帮助读者快速掌握其使用。 Pivot 语法 Pivot 语句的基本语法如下: ``` SELECT <非透视的列>, [第一个透视的列] AS <列名称>, [第二个透视的列] AS <列名称>, ... [最后一个透视的列] AS <列名称>, FROM (<生成数据的 SELECT 查询>) AS <源查询的别名> PIVOT( <聚合函数>(<要聚合的列>) FOR [ <包含要成为列标题的值的列> ] IN ( [第一个透视的列], [第二个透视的列], ... [最后一个透视的列] ) ) AS <透视表的别名> <可选的 ORDER BY 子句>; ``` Pivot 执行过程 Pivot 语句的执行过程可以分为四个步骤: 1. 在 IN 后面的行值称为非透视列。 2. 查询时先对非透视列的非聚合列进行分组,用一般查询语句表示如下: ``` Select 非透视列的非聚合列(包含要成为列标题的值的列), 聚合函数(要聚合的列) From 源表 Group by 非透视列的非聚合列 ``` 3. 将要成为列标题的值转化成透视列,其值为(2)的查询结果集中对应的聚合函数(要聚合的列)值。 4. 由于执行步骤(3)后,原分组列中少了(包含要成为列标题的值的列),因此以剩下的列再分组,这可能会导致结果集的某条记录的透视列有多个值。 实例分析 下面是一个简单的实例,演示如何使用 Pivot 语句将学生的成绩表转化为透视表。 创建一个学生的成绩表: ``` CREATE TABLE [dbo].[CJB]( [学号] [char](6) NOT NULL, [课程号] [char](3) NOT NULL, [成绩] [int] NULL ) ON [PRIMARY] ``` 然后,插入一些示例数据: ``` INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N'101101', N'101', 80) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N'101101', N'102', 78) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N'101101', N'206', 76) ... ``` 现在,我们可以使用 Pivot 语句将成绩表转化为透视表: ``` SELECT 学号, [101] AS 101, [102] AS 102, [206] AS 206 FROM ( SELECT 学号, 课程号, 成绩 FROM CJB ) AS SourceTable PIVOT( AVG(成绩) FOR 课程号 IN ( [101], [102], [206] ) ) AS PivotTable; ``` 这个 Pivot 语句将成绩表转化为一个透视表,其中每一行代表一个学生,每一列代表一个课程号,单元格中的值为该学生在该课程的成绩。 实验题目 1. 使用 Pivot 语句将成绩表转化为透视表,显示每个学生的平均成绩。 2. 使用 Pivot 语句将成绩表转化为透视表,显示每个课程的最高成绩。 3. 使用 Pivot 语句将成绩表转化为透视表,显示每个学生的总成绩。 通过这些实验题目,你可以更好地理解和掌握 Pivot 语句的使用。
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 提供redis 7.4.1 x86 linux版本,已编译可以直接执行使用
- 《ARM9嵌入式系统设计基础教程》第6章嵌入式系统总线接口.ppt
- 【Web网页设计制作-毕业设计期末大作业源码】农家乐旅游专题网页源码html css网页制作成品
- druuid加密 druuid加密
- K3385-Z-E1-AZ-VB一款N-Channel沟道TO252的MOSFET晶体管参数介绍与应用说明
- 《Java语言编程基础立体化实用教程》1-3+学生成绩管理系统输入功能的改进(一).ppt
- 《AI硬件与Pyhthon编程实践》01计算机视觉与Python编程实践写字字帖.ppt
- 公开整理-全国省市县人口与人口密度数据集(1990-2022年).xlsx
- K3377-Z-E2-VB一款N-Channel沟道TO252的MOSFET晶体管参数介绍与应用说明
- PPT模版-测试使用模版