行转列怎么显示内容?而不是统计数量
比如说成绩表:姓名,考试月份,科目,成绩:
name month subject score
张三 2012-09 数学 80
张三 2012-09 语文 30
张三 2012-09 英语 30
李四 2012-09 英语 45
李四 2012-09 语文 34
张三 2012-10 化学 10
王五 2012-10 物理 30现在只能够统计:
 select * from 
 (select * from exam) p PIVOT( max(score) for subject in ([数学],[语文],[英语],[物理],[化学]))
  as pvt
=========================================================
name month 数学 语文 英语 物理 化学
李四 2012-09 NULL 34 45 NULL NULL
张三 2012-09 80 30 30 NULL NULL
王五 2012-10 NULL NULL NULL 30 NULL
张三 2012-10 NULL NULL NULL NULL 10
=========================================================
如果成绩是字符串呢,这个效果如何实现:
name month 数学 语文 英语 物理 化学
李四 2012-09 NULL 很菜 一般 NULL NULL
张三 2012-09 很好 很好 较差 NULL NULL
王五 2012-10 NULL NULL NULL 很菜 NULL
张三 2012-10 NULL NULL NULL NULL 很菜

解决方案 »

  1.   

    好像用max函数也能实现,其他都不用变
      

  2.   


    我需要显示成绩,不是需要count()Max()P()
      

  3.   

    name month subject score
     张三 2012-09 数学 很好
     张三 2012-09 语文 很好
     张三 2012-09 英语 很好
     李四 2012-09 英语 一般
     李四 2012-09 语文 一般
     张三 2012-10 化学 很菜
     王五 2012-10 物理 很菜
      

  4.   


    用max()也能实现...字符也能用max,min
      

  5.   

     (select [name],score=(case when score<35 then '很菜' when score<60 then '较差' when score<80 then '一般' else '较好' end),subject from tb)p PIVOT( max(score) for subject in ([数学],[语文],[英语],[物理],[化学]))
      as pvt