资源描述:
《SQL Server 查询语句Pivot详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.PIVOT语法。SELECT<非透视的列>,[第一个透视的列]AS<列名称>,[第二个透视的列]AS<列名称>,...[最后一个透视的列]AS<列名称>,FROM(<生成数据的SELECT查询>)AS<源查询的别名>PIVOT(<聚合函数>(<要聚合的列>)FOR[<包含要成为列标题的值的列>]IN([第一个透视的列],[第二个透视的列],...[最后一个透视的列]))AS<透视表的别名><可选的ORDERBY子句>;2.PIVOT执行过程:(1)in后面的行值称为非透视列;(2)查询时先对非透视列的非聚合列进行分组;用一般查询语句表示如下:Select非透视列的非聚合列(包含要
2、成为列标题的值的列),聚合函数(要聚合的列)From源表Groupby非透视列的非聚合列(3)将要成为列标题的值转化成透视列,其值为(2)的查询结果集中对应的聚合函数(要聚合的列)值;(4)由于执行步骤(3)后,原分组列中少了(包含要成为列标题的值的列),因此以剩下的列再分组,这可能会导致结果集的某条记录的透视列有多个值。3.例题:1)源数据:CREATETABLE[dbo].[CJB]([学号][char](6)NOTNULL,[课程号][char](3)NOTNULL,[成绩][int]NULL)ON[PRIMARY]INSERT[dbo].[CJB]([学号],[课程号],[成
3、绩])VALUES(N'101101',N'101',80)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101101',N'102',78)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101101',N'206',76)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101103',N'101',62)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101103',N'102',70)INSERT[dbo].[CJB]([学号
4、],[课程号],[成绩])VALUES(N'101103',N'206',81)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101104',N'101',90)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101104',N'102',84)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101104',N'206',65)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101102',N'102',78)INSERT[dbo]
5、.[CJB]([学号],[课程号],[成绩])VALUES(N'101102',N'206',78)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101106',N'101',65)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101106',N'102',71)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101106',N'206',80)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101107',N'101',78)I
6、NSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101107',N'102',80)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101107',N'206',68)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101108',N'101',85)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101108',N'102',64)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101108',N
7、'206',87)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101109',N'101',66)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101109',N'102',83)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALUES(N'101109',N'206',70)INSERT[dbo].[CJB]([学号],[课程号],[成绩])VALU