2012-12-12 67 views
1

我需要一些帮助来在Oracle中编写数据。我会举一个例子 -Oracle查询将奇数的行放在偶数的旁边

我有一个名称列的表客户。

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 
+3

什么定义行是否是奇数还是偶数?行不是在关系数据库中自然排序的 –

回答

2

这个ia基本上是数据的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 | 
+0

谢谢bluefeet。 IT符合我的期望。 – vibhu

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 ...))获取有意义的订单。