[ 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的语法执行机制

解决方案 »

  1.   

    PIVOT就是缩水版的SUM(CASE WHEN),把后者原理搞明白了就行了。
      

  2.   

    例如:create table Student(Sno varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10),Ssubject nvarchar(10),Sscore int)
    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
      

  3.   

    先把所有没有作为pivot 输入参数的列作为分组列,
    然后执行类似case 操作,
    最后实行聚合
      

  4.   


    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