前些群里有个兄弟提到,一个查询结果,在展现报表时,要分两栏,大体效果如下:
ID | NAME
------------------------------------------------------
01 | 张三
02 | 李四
03 | 王五
------------------------------------------------------
结果要求:第一行和第二行要打印到第一行,第三行和第四行(如果有)打印到第二行:
ID | NAME | ID | NAME
------------------------------------------------------
01 | 张三 | 02 | 李四
03 | 王五
------------------------------------------------------
SQL> with test as ( 2 select 1 n,'a' name from dual union all 3 select 2 n,'b' name from dual union all 4 select 3 n,'c' name from dual union all 5 select 4 n,'d' name from dual union all 6 select 5 n,'e' name from dual union all 7 select 6 n,'f' name from dual union all 8 select 7 n,'g' name from dual 9 ) 10 select 11 trunc((rownum+1) / 2) OrderID , 12 max(case when mod(rownum,2) = 1 then n else null end) as N1 , 13 max(case when mod(rownum,2) = 1 then name else null end) as name1 , 14 max(case when mod(rownum,2) = 0 then n else null end) as N2 , 15 max(case when mod(rownum,2) = 0 then name else null end) as name2 16 from test 17 group by trunc((rownum+1) / 2) 18 / ORDERID | N1 | N | N2 | N ---------- ---------- - ---------- - 1 | 1 | a | 2 | b 2 | 3 | c | 4 | d 3 | 5 | e | 6 | f 4 | 7 | g SQL> |