1

我需要一些帮助来制定 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
4

2 回答 2

2

这基本上是PIVOT数据的一部分,但 Oracle10g 没有数据透视函数,因此您必须使用聚合和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

结果:

|  NAME1 | NAME2 |
------------------
| Ashish |  Amit |
|  Sunny |   Bob |
于 2012-12-12T10:06:53.080 回答
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 ...)) 来获得有意义的订单。

于 2012-12-12T10:03:19.910 回答