我在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
答案 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
结果:
| 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 ...)
)来获得有意义的订单。