表TABLE
line  value
1      a
2      b
3      c
4      d
5      e
6      f
7      g
8      h
9      i寻求sql查询结果如下line    value    line   value   line   value
1        a         2      b      3       c
4        d         5      e      6       f
7        g         8      h      9       i或者构造一个temp表也可以

解决方案 »

  1.   

    给你个例子:
    CREATE TABLE t5 AS SELECT ROWNUM a,ROWNUM b FROM dual CONNECT BY ROWNUM<9;
    SELECT * FROM t5;
    SELECT MAX(A) A, MAX(B) B, MAX(C) B, MAX(D) D, MAX(E) E, MAX(F) F
      FROM (SELECT DECODE(MOD(RN, 3), 1, A) A,
                   DECODE(MOD(RN, 3), 1, B) B,
                   DECODE(MOD(RN, 3), 2, A) C,
                   DECODE(MOD(RN, 3), 2, B) D,
                   DECODE(MOD(RN, 3), 0, A) E,
                   DECODE(MOD(RN, 3), 0, B) F,
                   CEIL(RN / 3) X
              FROM (SELECT A, B, ROW_NUMBER() OVER(ORDER BY A) RN FROM T5))
     GROUP BY X;
    输出:
    A B B D E F
    1 1 2 2 3 3
    4 4 5 5 6 6
    7 7 8 8
      

  2.   

    select max(decode(mod(line,3),1,line,0)) line_1,
           max(decode(mod(line,3),1,value,null)) value_1,
           max(decode(mod(line,3),2,line,0)) line_2,
           max(decode(mod(line,3),2,value,null)) value_2,
           max(decode(mod(line,3),0,line,0)) line_3,
           max(decode(mod(line,3),0,value,null)) value_3,
        from table
    group by trunc((line-1)/3)
      

  3.   

    不好意思没看太懂
    select max(decode(mod(line,3),1,line,0)) line_1,
           max(decode(mod(line,3),1,value,null)) value_1,
           max(decode(mod(line,3),2,line,0)) line_2,
           max(decode(mod(line,3),2,value,null)) value_2,
           max(decode(mod(line,3),0,line,0)) line_3,
           max(decode(mod(line,3),0,value,null)) value_3,
        from table
    group by trunc((line-1)/3)max(decode(mod(line,3),1,line,0)) line_1,
           max(decode(mod(line,3),1,value,null)) value_1,line,0这个0是什么意思?
    value,null这个null又是什么意思
    还有如果我还有一个其他的列,能不能再用其他的列group by?
      

  4.   

    max(decode(mod(line,3),1,line,0)) line_1, 
    就是如果mod(line,3)算出来等于1,就显示当前的line,否则显示0,然后再求MAX
    比如说line=1时,显示就是1,如果是2或者5时,就是0后面的max(decode(mod(line,3),2,line,0)) line_2
    就是mod(line,3)=2时,显示line,否则显示0下面的value也一样,只不过因为是字符型的,所要要赋个NULL,这样做MAX时,就会取出来正确的值
      

  5.   

    select max(decode(mod(line,3),1,line,0)) line_1,
           max(decode(mod(line,3),1,value,null)) value_1,
           max(decode(mod(line,3),2,line,0)) line_2,
           max(decode(mod(line,3),2,value,null)) value_2,
           max(decode(mod(line,3),0,line,0)) line_3,
           max(decode(mod(line,3),0,value,null)) value_3,
        from table
    group by trunc((line-1)/3)
      

  6.   

    下午去开会了,不好意思,那为什么要取max呢,还有如果还有一列 能不能再用那一列group by 
      

  7.   

    你可以把max()去掉,然后将 group by 改成order by,运行后看看效果,就能更好的理解为什么用 max()了。
    它只是将同样的行归并取有效行。