[ FROM { <table_source> } [ ,...n ] ] <table_source> ::= { <pivoted_table> } <pivoted_table> ::= table_source PIVOT <pivot_clause> table_alias <pivot_clause> ::= ( aggregate_function ( value_column ) FOR pivot_column IN ( <column_list> ) )
上面是语法格式,真不知道这个pivot到底是怎么得出最后的结果的,比如先对原表进行什么操作,接下来怎么操作,最后才得出转换的结果!分数不是问题,如果可以的话,也可以说下UNPivot的语法执行机制
上面是语法格式,真不知道这个pivot到底是怎么得出最后的结果的,比如先对原表进行什么操作,接下来怎么操作,最后才得出转换的结果!分数不是问题,如果可以的话,也可以说下UNPivot的语法执行机制
insert into Student values('01' , N'张三' , '1990-01-01' , N'男' , N'语文' , 60)
insert into Student values('02' , N'李四' , '1990-12-21' , N'男' , N'语文' , 80)
insert into Student values('03' , N'赵五' , '1990-05-20' , N'男' , N'语文' , 90)
insert into Student values('01' , N'张三' , '1990-01-01' , N'男' , N'数学' , 95)
insert into Student values('02' , N'李四' , '1990-12-21' , N'男' , N'数学' , 85)
insert into Student values('03' , N'赵五' , '1990-05-20' , N'男' , N'数学' , 35)
goselect * from student a pivot (max(Sscore) for Ssubject in (语文,数学)) b
/*
Sno Sname Sage Ssex 语文 数学
---------- ---------- ----------------------- ---------- ----------- -----------
01 张三 1990-01-01 00:00:00.000 男 60 95
02 李四 1990-12-21 00:00:00.000 男 80 85
03 赵五 1990-05-20 00:00:00.000 男 90 35(3 行受影响)
*/select * from (select sno , sname , Ssubject , Sscore from student) a pivot (max(Sscore) for Ssubject in (语文,数学)) b
/*
sno sname 语文 数学
---------- ---------- ----------- -----------
01 张三 60 95
02 李四 80 85
03 赵五 90 35(3 行受影响)
*/drop table Student
然后执行类似case 操作,
最后实行聚合
select * from
(select sno , sname , Ssubject , Sscore from student) a
pivot (
max(Sscore)
for Ssubject in (语文,数学)
) b对于乌龟老大的这个语句
pivot 输入参数是Sscore,Ssubject
分组列就是除了除了上面这2个字段,剩下的sno , sname
然后对Ssubject 实行case when
最后max