Oracle查询将行数设置为与偶数相邻的奇数

时间:2012-12-12 09:50:48

标签: sql oracle oracle10g

我在Oracle中制定数据时需要一些帮助。我举一个例子 -

我有一个名为Column的Table Customer。

Customer
  Name
  Ashish
  Amit
  Sunny
  Bob.

我希望以奇数的名称与偶数名称相邻的格式输出;输出将是

Customer
Name1     Name2
Ashish    Amit
Sunny     Bob 

依旧......

我尝试了以下查询,但它没有提供所需的输出。

select  name, 
  case Mod(rownum,2) 
    when 1  then  name
  end  col1,   
  case Mod(rownum,2) 
    when 0  then  name 
  end  col2
from Customer

2 个答案:

答案 0 :(得分:2)

这基本上是PIVOT数据,但Oracle10g没有pivot函数,因此您必须使用聚合和CASE语句复制它。如果您同时应用row_number() over(),则可以将数据转换为您想要的结果。

select 
  max(case when col = 1 then name end) Name1,
  max(case when col = 0 then name end) Name2
from
(
  select name,  mod(rownum, 2) col,
    row_number() over(partition by mod(rownum, 2) order by name) rn
  from customer
) 
group by rn

请参阅SQL Fiddle with Demo

结果:

|  NAME1 | NAME2 |
------------------
| Ashish |  Amit |
|  Sunny |   Bob |

答案 1 :(得分:0)

您需要将行2分组2,您可以尝试这样做:

SELECT MAX(decode(rn/2, floor(rn/2), NAME)) name1, 
       MAX(decode(rn/2, floor(rn/2), '', NAME)) name2
  FROM (SELECT c.*, rownum-1 rn 
          FROM Customer)
GROUP BY floor(rn/2)

行在子查询中任意排序。您可以使用分析(row_number() OVER (ORDER BY ...))来获得有意义的订单。