表T 如下:
 
    A    B       c
    1   数学    85
    1   语文    90
    2   英语    86
    2   历史    91
     .   .      .
     .   .      .
     .   .      .
     .   .      .B字段的课程不确定,有N多种
     
     变成
   A   数学   语文   英语  历史  .......
   1   85     90
   2                  86    91
   .
   .
   .
就是将B字段内容变成行。oracle用sql如何实现,谢谢各位了!
最好不用存储过程!

解决方案 »

  1.   

    select a,sum(mat) 数学,sum(chn) 语文,
    sum(eng) 英语,sum(his) 历史
    from(
    select a,
    decode(b,'数学',c,null) MAT,
    decode(b,'语文',c,null) CHN,
    decode(b,'英语',c,null) Eng,
    decode(b,'历史',c,null) his
     from t_12) group by a
      

  2.   

    谢谢楼上的回答,
    不过不是我想要的结果,B字段的课程不止是这几种,有N多种。是decode不过来的,太多了。
      

  3.   

    那好像得用存储过程来实现了,一条SQL好像不行
      

  4.   


    嗯,一条sql很难搞定,用存储过程的动态sql才可以搞得定的。
      

  5.   

    看来一条sql是很难搞定了,我以为oracle能有个什么函数能实现这个功能那。
    动态的sql如何实现啊!
      

  6.   


    如果是要得到的列是固定的也就是所的B字段科目是确定的话,可以用以上的方式,比较简单,毕竟是sql就搞定了,如果是不固定的,就要用procedure了
    参考这个点http://topic.csdn.net/u/20090512/14/169843a6-2b65-4e19-91fc-1731aae7b8d0.html