文档详情

SQL Server 查询语句Pivot详解.pdf

发布:2017-05-25约8.4千字共6页下载文档
文本预览下载声明
1. PIVOT 语法。 SELECT 非透视的列, [第一个透视的列] AS 列名称, [第二个透视的列] AS 列名称, ... [最后一个透视的列] AS 列名称, FROM (生成数据的 SELECT 查询) AS 源查询的别名 PIVOT ( 聚合函数(要聚合的列) FOR [包含要成为列标题的值的列] IN ( [第一个透视的列], [第二个透视的列], ... [最后一个透视的列]) ) AS 透视表的别名 可选的 ORDER BY 子句; 2. PIVOT 执行过程: (1)in 后面的行值称为非透视列; (2 )查询时先对非透视列的非聚合列进行分组;用一般查询语句表示如下: Select 非透视列的非聚合列(包含要成为列标题的值的列), 聚合函数(要聚合的 列) From 源表 Group by 非透视列的非聚合列 (3 )将要成为列标题的值转化成透视列,其值为 (2 )的查询结果集中对应的聚 合函数(要聚合的列)值; (4 )由于执行步骤(3 )后,原分组列中少了(包含要成为列标题的值的列),因 此以剩下的列再分组,这可能会导致结果集的某条记录的透视列有多个值。 3 .例题: 1)源数据: CREATE TABLE [dbo].[CJB]( [学号] [char](6) NOT NULL, [课程号] [char](3) NOT NULL, [成绩] [int] NULL ) ON [PRIMARY] INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101101, N101, 80) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101101, N102, 78) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101101, N206, 76) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101103, N101, 62) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101103, N102, 70) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101103, N206, 81) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101104, N101, 90) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101104, N102, 84) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101104, N206, 65) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101102, N102, 78) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101102, N206, 78) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101106, N101, 65) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101106, N102, 71) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101106, N206, 80) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101107, N101, 78) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101107, N102, 80) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101107, N206, 68) INSERT [dbo].[CJB] ([学号], [课程号], [成绩]) VALUES (N101108, N101, 85) INSERT [dbo].[CJB] ([学号], [课程号
显示全部
相似文档