行转列、列转行
wmsys.wm_concat、decode来实现

解决方案 »

  1.   

    看一下你后面的例子,感觉他就是多个航转列的集合啊,没想到不用union的方法。。继续思考。。
      

  2.   


    with test_students as(
    select 1 id,90 语文,100 数学,12 英语 from dual union all
    select 2,34,34,23 from dual union all
    select 3,0,33,12 from dual union all
    select 4,5,5,5 from dual)
    select regexp_substr(str, '[^,]+', 1, rownum) str1
      from (select wmsys.wm_concat(id || '|' || '语文|' || 语文 || ',' || id ||
                                   '|数学' || '|' || 数学 || ',' || id || '|英语' || '|' || 英语) str
              from test_students) t
    connect by rownum <= (length(regexp_replace(str, '[^,]+', 1)) + 1) / 2结果:STR1
    --------------------------------------------------------------------------------
    1|语文|90
    1|数学|100
    1|英语|12
    2|语文|34
    2|数学|34
    2|英语|23
    3|语文|0
    3|数学|33
    3|英语|12
    4|语文|5
    4|数学|5
    4|英语|5没时间了,出去了,你把得出的字段分成三个字段吧哈
      

  3.   

    wm_concat的输出似乎不符合要求,是不是有什么参数?
      

  4.   

    有什么问题,现在的输出有什么问题么。。
    和你说一下思路。
    我是将一行组成一个字段,并使用与wm_concat相同的拼接方式,将所有记录拼接为一个字符串。
    再使用正则表达式将整个字符串进行分行处理。
      

  5.   

    有什么问题,现在的输出有什么问题么。。
    和你说一下思路。
    我是将一行组成一个字段,并使用与wm_concat相同的拼接方式,将所有记录拼接为一个字符串。
    再使用正则表达式将整个字符串进行分行处理。
    我就是上面两个图,转换来转换去,有没有简便的方法.
    大神的方法我先跑一遍试试
      

  6.   

    若是11g的话 有对应的关键字  pivot unpivot 可以处理
      

  7.   

    谢谢.这个似乎更方便一点
    http://blog.csdn.net/tianlesoftware/article/details/7060306