hello,大家好。
数据库中查出来的结果表为:
No Value Code
1 20 A1
2 30 A2
3 21 A1
4 26 A2要在新表中实现的结果为:
........ A1 A2 ......
........ 20 30 ......
........ 21 26 ......问题如下:
(1)是否可用sql实现?我的一个师兄说不能用sql实现。
(2)如若不能用sql实现,用程序该怎么实现呢?

解决方案 »

  1.   

    --行列转换
    select No,max(decode(code,'A1',value,null)) A1,
    max(decode(code,'A2',value,null)) A2
    from tablename
    group by No
      

  2.   


    decode(code,A1,value) A1,decode(code,B1,value) B1
      

  3.   

    1 20 A1
    2 30 A2
    3 21 A1
    4 26 A2在新表里要放成横的话,照你的样子
    ........ A1 A2 ......
    ........ 20 30 ......
    ........ 21 26 ......
    原表里的第一行的20 和第二行的30 放在一行是根据什么判定的,每二行转一次?还是根据别的什么ID来关联的。
      

  4.   

    恩,明白了,我把需求再讲解一下
    表1为Table1,省略号代表Table1还有很多的行数据。
    No Value Code
    1   20    A1
    2   30    A2
    3   21    A1
    4   26    A2
    .    .     .
    .    .     .
    .    .     . 
    .    .     .
    需要将Table1经过Sql处理后,变成下面的结果,原来Table1中的code字段列下面A1,A2等内容变成了新表中的列,相当于是行转换成列,比如,A1变成了新的一列,A1下的内容为在Table1中A1对应的value的值,同样A2变成了新的一列,A2下的内容为在Table1中A2对应的value的值,同理,A3,A4,A5..........  A1 A2 ......  
    ......20 30 ......
    ......21 26 ......
    ..................
    ...................刚才第一次问问题的时候,问题没有表达清楚,不知道这次是否清楚了。
    2楼的代码学习了呀,如果,按照现在的表述,Table1中的code字段下面的A1,A2,A3......在行列转换的时候应该怎么取得呢?
      

  5.   

    如果内容不确定的话,还是写个过程,在里面按2楼的办法拼动态sql然后执行.会用到cursor.
      

  6.   

    你这里面的列给的不够充足,如果是实际需求我觉得会有一列来标识不同的A1,A2的所属关系:       
    我写过一篇笔记 是行转列的 里面是以学生,课程,和成绩为例实现的,你可以参考下
    http://lizhiyu.javaeye.com/blog/752453